我想将pd.DataFrame.sum与apply一起使用。但是,签名似乎无效
我从这里开始:python pandas: apply a function with arguments to a series,以了解使用Apply将参数传递给函数所需要的处理。我尝试了似乎更合适的答案(第三个),但仍然无法使用参数。
indexes = ['2017-09-01 01:15:00', '2017-09-01 01:30:00',
'2017-09-01 01:54:00', '2017-09-01 01:59:00',
'2017-09-01 02:15:00', '2017-09-01 02:30:00',
'2017-09-01 02:54:00', '2017-09-01 02:59:00',
'2017-09-01 05:15:00', '2017-09-01 05:30:00',
'2017-09-01 05:54:00', '2017-09-01 05:59:00']
values_A = [1, 3, 4, 3, 5, 6, 3, 3, 9, 1, 9, 8]
values_B = [1, 3, 4, 3, 5, 6, 3, 3, 9, 2, 6, 3]
table = pd.DataFrame({'datetime' : indexes, 'A' : values_A, 'B' : values_B})
table['datetime'] = pd.to_datetime(table['datetime'])
table.set_index('datetime', inplace=True)
table.sort_index(inplace=True)
我想要的(并使用
获得 table.groupby([pd.Grouper(freq='60Min', base=0)]).sum(skipna=True)
):
2017-09-01 01:00:00 11.0 11.0
2017-09-01 02:00:00 17.0 17.0
2017-09-01 03:00:00 NaN NaN
2017-09-01 04:00:00 NaN NaN
2017-09-01 05:00:00 27.0 20.0
我得到的(使用
table.groupby([pd.Grouper(freq='60Min',base=0)]).apply(pd.Series.sum, skipna = True):
2017-09-01 01:00:00 11.0 11.0
2017-09-01 02:00:00 17.0 17.0
2017-09-01 03:00:00 0.0 0.0
2017-09-01 04:00:00 0.0 0.0
2017-09-01 05:00:00 27.0 20.0
答案 0 :(得分:0)
这不是真正的解决方案。但这是规避问题的一种方法。如果我愿意
table['hour'] = table.index.hour
table.groupby([pd.Grouper(freq='60Min', base=0), 'hour']).apply(pd.Series.sum, skipna = True)
不存在的时间将被消除。但是,这不能解释观察到的行为。