【问题标题】:Groupby by different columns按不同列分组
【发布时间】:2018-08-24 11:44:45
【问题描述】:

我有一个如下的数据框:

    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...

……以此类推

【问题讨论】:

  • 嗨,这不是重复的,因为我需要的值也应该按小时分组。
  • 如果我的回答对您有帮助,请不要忘记accept - 单击答案旁边的复选标记 (v) 将其从灰色切换为已填充。谢谢。跨度>

标签: pandas datetime group-by


【解决方案1】:

或者你可以使用Grouper:

df.groupby(pd.Grouper(key='DateTime', freq='"H'), 'Channel', 'StationID')['Count'].sum()

【讨论】:

    【解决方案2】:

    我认为你需要groupby 和聚合sum,对于datetimes 和hours 添加floor - 它将minutes 和seconds 设置为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]
    

    但如果日期不重要,则只使用小时hour

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多