python - 按跨年的日历周分组
问题描述
我想按日历周对数据进行分组。但是,我有多年的数据。因此,不仅仅是周数,而是每年分开。这是一个例子。
ix = pd.DatetimeIndex(['2019-12-25', '2019-12-28', '2019-12-31', '2020-01-03'])
df = pd.DataFrame({'col': [1, 1, 1, 1]}, index=ix)
我的问题是第一周的日子仍然在前一年。
>>> df.groupby([ix.year, ix.month, ix.week]).count()
count
2019 12 1 1
52 2
2020 1 1 1
我如何分组以产生日历周?在这里它将产生两组两行。
解决方案
从纪元日期(1/1/1970)获取周数可能会有所帮助。
day_delta = pd.to_datetime(df.index) - pd.to_datetime('19700101')
df['day'] = (day_delta / np.timedelta64(1, 'D')).astype(int) - 3 # considering week start as sunday
df['week'] = df['day'].apply(lambda x: int(x / 7))
print(df)
输出:
col day week
2019-12-25 1 18252 2607
2019-12-28 1 18255 2607
2019-12-31 1 18258 2608
2020-01-03 1 18261 2608
这在同一周给出了 2019-12-31 和 2020-01-03。
我想你需要从纪元日期计算月数和年数,并使用年、月和周数(从纪元日期)对它们进行分组