通过使用列表作为分组标准,pandas如何在DateTime系列上执行分组?

时间:2017-02-19 20:21:05

标签: python pandas datetime dataframe

如果df是由Dataframe个对象编制索引的DateTime,则以下代码会将其拆分为列表groups_list,其中每个索引都包含df中的所有数据那属于某一天:

groupby_clause = [df.index.year,df.index.month,df.index.day]
groups_list = [group[1] for group in df.groupby(groupby_clause)]

我很难理解分组是如何实现的,因为我不需要将groupby_clause的元素标记为年份,月份和日期,以便进行分组在DateTime个对象上。

例如,我有groups_list的以下组件:

enter image description here

也许我错过了一些明显的东西,但我不明白:大熊猫如何知道它应该groupby_clause[0]与年,groupby_clause[1]和月{{{}相关联1}}到一天,以便对具有groupby_clause[2]类型的数据框索引进行分组?

1 个答案:

答案 0 :(得分:0)

假设你有一个像这样的DataFrame:

                            0
2011-01-01 00:00:00 -0.324398
2011-01-01 01:00:00 -0.761585
2011-01-01 02:00:00  0.057204
2011-01-01 03:00:00 -1.162510
2011-01-01 04:00:00 -0.680896
2011-01-01 05:00:00 -0.701835
2011-01-01 06:00:00 -0.431338
2011-01-01 07:00:00  0.306935
2011-01-01 08:00:00 -0.503177
2011-01-01 09:00:00 -0.507444
2011-01-01 10:00:00  0.230590
2011-01-01 11:00:00 -2.326702
2011-01-01 12:00:00 -0.034664
2011-01-01 13:00:00  0.224373
2011-01-01 14:00:00 -0.242884

如果您希望索引按年份和日期,那么只需set_index

df.set_index([ts.index.year, ts.index.month, ts.index.day])

输出

                 0
2011 1 1 -0.324398
       1 -0.761585
       1  0.057204
       1 -1.162510
       1 -0.680896
       1 -0.701835
       1 -0.431338
       1  0.306935
       1 -0.503177
       1 -0.507444
       1  0.230590
       1 -2.326702
       1 -0.034664
       1  0.224373
       1 -0.242884
       1 -0.134757
       1 -1.177362
       1  0.931335
       1  0.904084
       1 -0.757860
       1  0.406597
       1 -0.664150