pandas在groupby对象上应用groupby

时间:2018-04-25 09:05:07

标签: python pandas pandas-groupby

我有数据,有2个索引(日期和时间),我用pandas.read_csv()导入它,它看起来最初是这样的:

Date         Time                   Volume
2016-01-04   2018-04-25 09:01:29    53645
             2018-04-25 10:01:29    123
             2018-04-25 10:01:29    1345
             ....
2016-01-05   2018-04-25 10:01:29    123
             2018-04-25 12:01:29    213
             2018-04-25 10:01:29    123
             ....

我希望每天在20分钟的垃圾箱上进行分组。它看起来应该是这样的。

Date         Time                   Volume
2016-01-04   2018-04-25 09:00:00    53645
             2018-04-25 09:20:00    456453
             2018-04-25 09:40:00    13153
             ....
             2018-04-25 17:00:00    13153
2016-01-05   2018-04-25 09:00:00    46465
             2018-04-25 09:20:00    454688
             2018-04-25 09:40:00    45645
             ....
             2018-04-25 17:00:00    45646

我已经实现了我想要的东西,但我很确定,有更多的“pythonic”和更少的内存消耗方式来实现我的目标。 我的代码现在看起来像:

    frames = []
    for date, sub_df in _file_data.groupby(level=0):
        gr = sub_df.groupby(pd.Grouper(level=1, freq="20min")).sum()
        frames.append(gr)
    _file_data = pd.concat(frames)

1 个答案:

答案 0 :(得分:1)

我认为需要DataFrameGroupBy.resample

df1 = df.reset_index(level=0).groupby('Date').resample('20min').sum()
print (df1)
                                Volume
Date       Time                       
2016-01-04 2018-04-25 09:00:00   53645
           2018-04-25 09:20:00       0
           2018-04-25 09:40:00       0
           2018-04-25 10:00:00    1468
2016-01-05 2018-04-25 10:00:00     246
           2018-04-25 10:20:00       0
           2018-04-25 10:40:00       0
           2018-04-25 11:00:00       0
           2018-04-25 11:20:00       0
           2018-04-25 11:40:00       0
           2018-04-25 12:00:00     213