如何按熊猫中的任意时间范围进行分组?

时间:2017-10-21 18:13:32

标签: python pandas

我有以下df

    A   B   C          D       E
8813    0   0   13:40:00    20.0
11998   0   0   18:00:00    20.0
12978   0   0   09:30:00    60.0
17899   0   0   19:00:00    15.0
19931   0   0   16:00:00    30.0

对于每对(B,C),我想得到两个范围内的平均E使用小时数(D):1。10到17.30,范围2. 17.31到20.30。

类似的东西:

    A   B   C      Range    Mean
8813    0   0          1    25.0 (8813+19931)/2
11998   0   0          2    17.5 (11998+17899)/2

如何按pandas中的任意时间范围进行分组?

1 个答案:

答案 0 :(得分:1)

您可以使用np.where

创建范围列
df['range'] = np.where(df['D'].dt.hour.between(10, 17.30), 1,\
np.where(df['D'].dt.hour.between(17.31, 20.30), 2, np.nan))

然后分组

df.groupby(['B', 'C','range'])['A', 'E'].mean().reset_index().\
.rename(columns = {'A': 'A_mean', 'E': 'E_mean'})

    B   C   range   A_mean  E_mean
0   0   0   1.0     14372.0 25.0
1   0   0   2.0     14948.5 17.5