Pandas 按不同列分组

Pandas 按不同列分组,pandas,datetime,group-by,Pandas,Datetime,Group By,我有一个数据帧nf,如下所示: StationID DateTime Channel Count 0 1 2017-10-01 00:00:00 1 1 1 1 2017-10-01 00:00:00 1 201 2 1 2017-10-01 00:00:00 1 8 3 1 2017-10-01 00:00:00 1 2 4 1 2017-10-01 00:00:00 1 0 5 1 2017-10-01 0

我有一个数据帧nf,如下所示:

    StationID   DateTime    Channel Count
0   1   2017-10-01 00:00:00 1   1
1   1   2017-10-01 00:00:00 1   201
2   1   2017-10-01 00:00:00 1   8
3   1   2017-10-01 00:00:00 1   2
4   1   2017-10-01 00:00:00 1   0
5   1   2017-10-01 00:00:00 1   0
6   1   2017-10-01 00:00:00 1   0
7   1   2017-10-01 00:00:00 1   0
。。。。。。。。。。等等 我想按每小时、每个频道和StationID的值进行分组

输出请求

Station ID DateTime       Channel    Count  
1   2017-10-01 00:00:00    1          232
1   2017-10-01 00:01:00    1          23
2   2017-10-01 00:00:00    1          244...
。。。。。。等等

我认为您需要使用聚合
总和
,对于
日期时间
s,按
小时
s添加-它设置
分钟
s和
s到
0

print (df)
   StationID             DateTime  Channel  Count
0          1  2017-12-01 00:00:00        1      1
1          1  2017-12-01 00:00:00        1    201
2          1  2017-12-01 00:10:00        1      8
3          1  2017-12-01 10:00:00        1      2
4          1  2017-10-01 10:50:00        1      0
5          1  2017-10-01 10:20:00        1      5
6          1  2017-10-01 08:10:00        1      4
7          1  2017-10-01 08:00:00        1      1

df['DateTime'] = pd.to_datetime(df['DateTime'])

df1 = (df.groupby(['StationID', df['DateTime'].dt.floor('H'), 'Channel'])['Count']
        .sum()
        .reset_index() 
        )
print (df1)
   StationID            DateTime  Channel  Count
0          1 2017-10-01 08:00:00        1      5
1          1 2017-10-01 10:00:00        1      5
2          1 2017-12-01 00:00:00        1    210
3          1 2017-12-01 10:00:00        1      2

print (df['DateTime'].dt.floor('H'))
0   2017-12-01 00:00:00
1   2017-12-01 00:00:00
2   2017-12-01 00:00:00
3   2017-12-01 10:00:00
4   2017-10-01 10:00:00
5   2017-10-01 10:00:00
6   2017-10-01 08:00:00
7   2017-10-01 08:00:00
Name: DateTime, dtype: datetime64[ns]
但如果日期不重要,则仅使用小时:

或者您可以使用:


您好,这不是重复的,因为我需要的值也应该按小时分组。如果我的答案有帮助,请不要忘记-单击答案旁边的复选标记(
v
),将其从灰色变为填充。谢谢
df2 = (df.groupby(['StationID', df['DateTime'].dt.hour, 'Channel'])['Count']
        .sum()
        .reset_index() 
        )
print (df2)
   StationID  DateTime  Channel  Count
0          1         0        1    210
1          1         8        1      5
2          1        10        1      7
df.groupby(pd.Grouper(key='DateTime', freq='"H'), 'Channel', 'StationID')['Count'].sum()