gpt4 book ai didi

python - 对多索引 Pandas 数据框中的行求和

转载 作者:太空宇宙 更新时间:2023-11-04 04:41:07 25 4
gpt4 key购买 nike

我有一个带有多索引的 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 岁的年龄,但我无法获得多个年龄(和总和)的年龄。

例如。对于 0 和 1 我想得到

关于优雅(高效)的方法有什么建议吗?

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

最佳答案

使用query对于每个第一级 years 的 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

详细信息:

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对于 index 并按 boolean indexing 过滤:

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

关于python - 对多索引 Pandas 数据框中的行求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50608790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com