我有一个如下的数据框 我想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)
答案 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