我有一个带有多索引的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
...
答案 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)
您可以使用loc
和slice
选择所需的DF部分,例如:
df.loc[(slice(None),slice(10,20)),:].sum(level=0)
其中(slice(None),slice(10,20))
允许您保留所有年份和年龄在10到20之间的所有索引