我有以下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中的任意时间范围进行分组?
答案 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