如何在熊猫多指数中分组小时

时间:2017-09-27 12:19:39

标签: python pandas

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

react-table

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

                  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

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

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

一天中24小时内的平均值,但是我对性别指数的追踪......

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

1 个答案:

答案 0 :(得分:2)

我认为您可以添加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