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)