2017-07-03 100 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