使用pd.grouper分组每个n分钟

时间:2017-07-13 12:37:15

标签: pandas pandas-groupby

我有一个如下的数据框 我想groupby class,subclassadn描述每小时间隔的D列

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)需要一些时间(也许是因为有多个相同的时间戳,如9:15:00,9:15:00) 然后我尝试了df.groupby(['B','C'],pd.Grouper(level=times,freq='15T'))['D'].describe().astype(int)

1 个答案:

答案 0 :(得分:3)

您需要使用关键参数:

server = ModularServer(SwarmportModel, [grid], "SwarmportModel",)
TypeError: __init__() missing 3 required positional arguments: 'N', 'width', and 'height'

您可以通过编程方式从第一个观察点(thanks to @MaxU)获取基本参数:

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