【问题标题】:how to groupby hour in a pandas multiindex如何在熊猫多索引中按小时分组
【发布时间】:2018-03-08 22:22:29
【问题描述】:

我有一个带有两个索引、一个数据和一个性别列的 pandas 多索引。它看起来像这样:

                  Division  North  South  West  East

               Date Gender     
2016-05-16 19:00:00      F      0      2     3     3
                         M     12     15    12    12
2016-05-16 20:00:00      F     12      9    11    11
                         M     10     13     8     9
2016-05-16 21:00:00      F      9      4     7     1
                         M      5      1    12    10

现在,如果我想找到每小时的平均值,我知道我可以这样做:

df.groupby(df.index.hour).mean()

但是当你有一个多索引时这似乎不起作用。我发现我确实可以达到 Date 索引,例如:

df.groupby(df.index.get_level_values('Date').hour).mean()

一天 24 小时内的平均值是多少,但我忘记了性别指数...

所以我的问题是:我怎样才能找到按性别划分的每个部门的平均小时值?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    我觉得可以加MultiIndex的等级,需要pandas 0.20.1+:

    df1 = df.groupby([df.index.get_level_values('Date').hour,'Gender']).mean()
    print (df1)
                 North  South  West  East
    Date Gender                          
    19   F           0      2     3     3
         M          12     15    12    12
    20   F          12      9    11    11
         M          10     13     8     9
    21   F           9      4     7     1
         M           5      1    12    10
    

    另一种解决方案:

    df1 = df.groupby([df.index.get_level_values('Date').hour,
                      df.index.get_level_values('Gender')]).mean()
    print (df1)
                 North  South  West  East
    Date Gender                          
    19   F           0      2     3     3
         M          12     15    12    12
    20   F          12      9    11    11
         M          10     13     8     9
    21   F           9      4     7     1
         M           5      1    12    10
    

    或者简单地从MultiIndex创建列:

    df = df.reset_index()
    df1 = df.groupby([df['Date'].dt.hour, 'Gender']).mean()
    print (df1)
                 North  South  West  East
    Date Gender                          
    19   F           0      2     3     3
         M          12     15    12    12
    20   F          12      9    11    11
         M          10     13     8     9
    21   F           9      4     7     1
         M           5      1    12    10
    

    【讨论】:

      猜你喜欢
      • 2013-11-16
      • 2020-03-24
      • 2016-12-14
      • 2016-12-06
      • 2020-03-30
      • 2016-10-16
      • 2019-01-19
      • 2023-02-16
      • 2019-06-29
      相关资源
      最近更新 更多