给定一个包含以下列的文件:
date, userid, amount
其中日期
采用yyyy-mm-dd格式。我正在尝试使用 python pandas 将多年的 yyyy-mm-dd 分配为累积的周数。例如:
2017-01-01 => 1
2017-12-31 => 52
2018-01-01 => 53
df_counts_dates=pd.read_csv("counts.csv")
print (df_counts_dates['date'].unique())
df = pd.to_datetime(df_counts_dates['date'])
print (df.unique())
print (df.dt.week.unique())
由于数据包含 2017 年 8 月至 2018 年 8 月日期,因此以上返回
[33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 1 2 3 4 5
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
31 32]
我想知道是否有任何简单的方法可以使第一个日期为“第 1 周”,并使周数跨年累加,而不是在每年年初变为 1?
最佳答案
我认为需要一种不同的方法 - 首先减去列的所有值,timedeltas 转换为 days
,地板除以 7
和最后一个 1
(不以 0
开始):
rng = pd.date_range('2017-08-01', periods=365)
df = pd.DataFrame({'date': rng, 'a': range(365)})
print (df.head())
date a
0 2017-08-01 0
1 2017-08-02 1
2 2017-08-03 2
3 2017-08-04 3
4 2017-08-05 4
w = ((df['date'] - df['date'].iloc[0]).dt.days // 7 + 1).unique()
print (w)
[ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
49 50 51 52 53]
关于python pandas 将多年的 yyyy-mm-dd 分配为累计周数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51667225/