2017-07-03 128 views
1

我试图将熊猫数据框分组为2天的桶。举例来说,如果我做了如下:Pandas GroupBy Date Chunks

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-04 & 2017-01-05,然后最后一个对于2017-01-06,或者只是通过重组和内部工作。

编辑:我最终希望根据每天大块苹果的数量制作用户列表,因此不想得到每天大块苹果的总和或平均值。对困惑感到抱歉!

预先感谢您!

回答

1

您可以使用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] 
+0

谢谢!这也适用,但不是我要找的 - 对不起,我不清楚!请参阅我的编辑。 – cgp25

+0

查看编辑答案。 – jezrael

+0

很高兴能帮到你,美好的一天! – jezrael

1

尝试使用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] 
+0

谢谢!这确实有用,但我的问题还不够清楚 - 请参阅我上面的编辑,对不起! – cgp25

+0

查看我的编辑 - 我看到你已经接受了上述的答案,但这是一种替代方法! – qbzenker

+0

是的,这也适用!谢谢! – cgp25