汇总多索引pandas数据帧中的行

时间:2018-05-30 15:43:52

标签: python pandas dataframe

我有一个带有多索引的Pandas数据框

             A         B
year  age  
1895   0     10        12
1895   1     13        14
...
1965   0     34        45
1965   1     41        34
      ...
1965  50     56        22
1966   0     10        34
...

我希望得到A列(和B)两个值(例如10和20)之间的所有年龄。我用.xs玩了一下,例如

pops.xs(20, level='age')

给出了每年20岁的年龄,但我不能在多个年龄(和总和)得到这个。

EG。对于0和1我想得到

任何有关优雅(高效)方式的建议吗?

          A         B
year    
1895      23        26
...
1965      75        79
...

2 个答案:

答案 0 :(得分:1)

使用query对每个第一级sum的{​​{1}}进行选择:

year

<强>详细

print (df)
           A   B
year age        
1895 8    10  12
     12   13  14
1965 0    34  45
     14   41  34
     12   56  22
1966 0    10  34

df = df.query('10 <= age <= 20').sum(level=0)
print (df)
       A   B
year        
1895  13  14
1965  97  56

另一个解决方案是print (df.query('10 <= age <= 20')) A B year age 1895 12 13 14 1965 14 41 34 12 56 22 使用Index.get_level_values并按boolean indexing过滤:

index

答案 1 :(得分:0)

您可以使用locslice选择所需的DF部分,例如:

df.loc[(slice(None),slice(10,20)),:].sum(level=0)

其中(slice(None),slice(10,20))允许您保留所有年份和年龄在10到20之间的所有索引