Python 对多索引数据帧中的行求和

Python 对多索引数据帧中的行求和,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个带有多索引的熊猫数据帧 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

我有一个带有多索引的熊猫数据帧

             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岁的所有年龄,但我无法得到多个年龄的数据(和总和)

对于0和1,我想得到

有没有关于优雅(高效)的方法的建议

          A         B
year    
1895      23        26
...
1965      75        79
...
用于选择每个第一级
年份的
sum

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

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

df.loc[(slice(None),slice(10,20)),:].sum(level=0)
其中
(切片(无),切片(10,20))
允许您保留10到20岁之间所有年龄段的所有索引

df.sum(level=0)
i = df.index.get_level_values('age')
print (i)
Int64Index([8, 12, 0, 14, 12, 0], dtype='int64', name='age')

df = df[(i >= 10) & (i <= 20)].sum(level=0)
print (df)
       A   B
year        
1895  13  14
1965  97  56
df.loc[(slice(None),slice(10,20)),:].sum(level=0)