如何將時間轉換為周數
year_start = '2019-05-21'
year_end = '2020-02-22'
如何根據我設定為第一周的日期獲取周數?例如 2019-05-21 應該是第 1 周而不是 2019-01-01
uj5u.com熱心網友回復:
如果您只需要一個函式來根據給定的開始和結束日期計算周數:
import pandas as pd
import numpy as np
start_date = "2019-05-21"
end_date = "2020-02-22"
start_datetime = pd.to_datetime(start_date)
end_datetime = pd.to_datetime(end_date)
def get_week_no(date):
given_datetime = pd.to_datetime(date)
# if date in range
if start_datetime <= given_datetime <= end_datetime:
x = given_datetime - start_datetime
# adding 1 as it will return 0 for 1st week
return int(x / np.timedelta64(1, 'W')) 1
raise ValueError(f"Date is not in range {start_date} - {end_date}")
print(get_week_no("2019-05-21"))
在函式中,我們通過查找給定日期和開始日期之間的差異來計算周數(以周為單位)。
uj5u.com熱心網友回復:
試試下面的代碼。
import numpy as np
import pandas as pd
year_start = '2019-05-21'
year_end = '2020-02-22'
# Create a sample dataframe
df = pd.DataFrame(pd.date_range(year_start, year_end, freq='D'), columns=['date'])
# Add the week number
df['week_number'] = (((df.date.view(np.int64) - pd.to_datetime([year_start]).view(np.int64)) / (1e9 * 60 * 60 * 24) - df.date.dt.day_of_week 7) // 7 1).astype(np.int64)
| 日期 | 周數 |
|---|---|
| 2019-05-21 | 1 |
| 2019-05-22 | 1 |
| 2019-05-23 | 1 |
| 2019-05-24 | 1 |
| 2019-05-25 | 1 |
| 2019-05-26 | 1 |
| 2019-05-27 | 2 |
| 2019-05-28 | 2 |
| 2020-02-18 | 40 |
| 2020-02-19 | 40 |
| 2020-02-20 | 40 |
| 2020-02-21 | 40 |
| 2020-02-22 | 40 |
uj5u.com熱心網友回復:
如果您沒有 year_start/year_end 之外的日期,請使用isocalendar().week并執行簡單的模減法:
year_start = pd.to_datetime('2019-05-21')
#year_end = pd.to_datetime('2020-02-22')
df = pd.DataFrame({'date': pd.date_range('2019-05-21', '2020-02-22', freq='30D')})
df['week'] = (df['date'].dt.isocalendar().week.astype(int)-year_start.isocalendar()[1])%52 1
輸出:
date week
0 2019-05-21 1
1 2019-06-20 5
2 2019-07-20 9
3 2019-08-19 14
4 2019-09-18 18
5 2019-10-18 22
6 2019-11-17 26
7 2019-12-17 31
8 2020-01-16 35
9 2020-02-15 39
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/428722.html
下一篇:KeyError:“沒有[Index([(84,90,50,29,49,44,30,98,31,66),(68,78,28,80,45,56,53,93,31,66)],dtype='obj
