Pandas group by chunks不是单一的值

时间:2016-09-17 14:22:29

标签: python pandas dataframe grouping

现在我对使用熊猫分组内容感到困惑。

我有3列的数据集(超过60k行):

2015/12/18 11:12:49 +0300   d1  b1
2015/12/18 11:12:50 +0300   d2  b2
2015/12/18 11:13:08 +0300   d1  b3
2015/12/18 11:13:36 +0300   d2  b4
2015/12/18 11:13:43 +0300   d2  b5
2015/12/18 11:14:21 +0300   d2  c0
2015/12/18 11:14:42 +0300   d2  c1
2015/12/18 11:15:13 +0300   d1  c2
2015/12/18 11:15:19 +0300   d3  c3

我需要计算按时间段分组的行数(让我们说0-4,4-8,8-12等等4小时)和工作日,然后得到一组时间段一个星期。

我可以在一周内获得每小时的总和(时间是第一列的名称):

dind = pd.DatetimeIndex(df.time)
gr = df.groupby([dind.weekday, dind.hour])
gr.size()

但我无法弄清楚如何按块进行分组,然后将结果MultiIndex合并到单个索引列中。

我希望能清楚地描述这个问题。

1 个答案:

答案 0 :(得分:1)

您提出问题的第一部分,如何按4小时分组是很容易的,并在下面的两个选项中解决。 df.index.hour // 4

第二部分含糊不清,因为有几种方法可以解释"合并成一列"。我为你提供了两种选择。

选项1

gpd = df.groupby([df.index.weekday, df.index.hour // 4]).size()
gpd.index = gpd.index.to_series()
gpd

(4, 2)    9
dtype: int64

选项2

gpd = df.groupby([df.index.weekday, df.index.hour // 4]).size()
gpd.index = ['{}_{}'.format(*i) for i in gpd.index]
gpd

4_2    9
dtype: int64