Pandas GroupBy 日期块

Pandas GroupBy Date Chunks

我正在尝试将 Pandas 数据框分组到 2 天的桶中。例如,如果我执行以下操作:

df = pd.DataFrame()
df['action_date'] = ['2017-01-01', '2017-01-01', '2017-01-03', '2017-01-04', '2017-01-04', '2017-01-05', '2017-01-06']
df['action_date'] = pd.to_datetime(df['action_date'], format="%Y-%m-%d")
df['user_name'] = ['abc', 'wdt', 'sdf', 'dfe', 'dsd', 'erw', 'fds']
df['number_of_apples'] = [1,2,3,4,5,6,2]
df = df.groupby(['action_date', 'number_of_apples']).sum()

我得到一个按 action_date 分组的数据框,每天 number_of_apples。

但是,如果我想以 2 天为单位查看数据框,我该怎么做呢?然后我想分析每个 date_chunk 的 number_of_apples,或者通过为日期 2017-01-01 和 2017-01-03 制作新的数据框,另一个为 2017-01-04 和 2017-01 -05,然后是 2017-01-06 的最后一个,或者只是通过重新组合并在其中工作。

编辑:我最终想根据用户每天拥有的苹果数量制作用户列表,因此不想获得每天块的苹果的总和或平均值。抱歉造成混淆!

提前致谢!

尝试使用 TimeGrouper 按两天分组。

>>df.index=df.action_date
>>dg = df.groupby(pd.TimeGrouper(freq='2D'))['user_name'].apply(list) # 2 day frequency
>>dg.head()

action_date
2017-01-01         [abc, wdt]
2017-01-03    [sdf, dfe, dsd]
2017-01-05         [erw, fds]

您可以使用 resample:

print (df.resample('2D', on='action_date')['number_of_apples'].sum().reset_index())
  action_date  number_of_apples
0  2017-01-01                 3
1  2017-01-03                12
2  2017-01-05                 8

编辑:

print (df.resample('2D', on='action_date')['user_name'].apply(list).reset_index())
  action_date        user_name
0  2017-01-01       [abc, wdt]
1  2017-01-03  [sdf, dfe, dsd]
2  2017-01-05       [erw, fds]