2017-07-13 39 views
0

我有一個數據幀像下面 欲GROUPBY類,subclassadn描述d柱用於每個小時的時間間隔使用pd.grouper到組由n分鐘每

A,B,C,D 
06-JUL-2017 09:15:00,class1,subclass1,3 
06-JUL-2017 09:16:00,class1,subclass2,4 
06-JUL-2017 10:15:00,class2,subclass1,5 
06-JUL-2017 10:17:00,,class2,subclass2,7 

我使用:

`df.groupby(['B','account'],pd.Grouper(freq='60T'))['D'].describe().astype(int)` 

但是,我如何告訴Groper它必須從A列中取時間,然後應用60T的頻率間隔。

預期運算:(類似於)

class1 subclass1 9:15  
       10:15 
     subclass2 9:15 
       10:15 
class2 subclass1 9:15 
       10:15 
     subclass2 9:15 
     subclass2 10:15 

我試圖times = pd.to_datetime(df.A)這需要一些時間(也許becasue有多個相同的時間戳等9點15分00秒,9點15分00秒) 我然後試圖df.groupby(['B','C'],pd.Grouper(level=times,freq='15T'))['D'].describe().astype(int)

回答

3

您需要使用的關鍵參數:從第一OBSERV

s ='''A,B,C,D 
06-JUL-2017 09:15:00,class1,subclass1,3 
06-JUL-2017 09:16:00,class1,subclass2,4 
06-JUL-2017 10:15:00,class2,subclass1,5 
06-JUL-2017 10:17:00,class2,subclass2,7''' 
df = pd.read_csv(pd.compat.StringIO(s)) 

df['A'] = pd.to_datetime(df['A']) 

df.groupby(['B', 'C', pd.Grouper(freq='60T', key='A', base=15)]).describe() 
Out: 
             D         
            count mean std min 25% 50% 75% max 
B  C   A               
class1 subclass1 2017-07-06 09:15:00 1.0 3.0 NaN 3.0 3.0 3.0 3.0 3.0 
     subclass2 2017-07-06 09:15:00 1.0 4.0 NaN 4.0 4.0 4.0 4.0 4.0 
class2 subclass1 2017-07-06 10:15:00 1.0 5.0 NaN 5.0 5.0 5.0 5.0 5.0 
     subclass2 2017-07-06 10:15:00 1.0 7.0 NaN 7.0 7.0 7.0 7.0 7.0 

您可以通過編程方式獲取基本參數通貨膨脹(thanks to @MaxU):

base = df.loc[df.index[0], 'A'].minute 
df.groupby(['B', 'C', pd.Grouper(freq='60T', key='A', base=base)]).describe() 
+1

我還使用:'鹼= df.loc [df.index [0], 'A'] minute' ...;) – MaxU

+0

什麼'基= 15 'do和文檔中的位置在哪裏? –

+0

@MaxU哦這是由第一次觀察決定的? – ayhan