我有数据,有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)
答案 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