gpt4 book ai didi

python - 切片 DataFrame 后如何更新 pandas MultiIndex 的级别?

转载 作者:太空狗 更新时间:2023-10-29 16:55:45 26 4
gpt4 key购买 nike

我有一个带有 pandas MultiIndex 的 Dataframe:

In [1]: import pandas as pd
In [2]: multi_index = pd.MultiIndex.from_product([['CAN','USA'],['total']],names=['country','sex'])
In [3]: df = pd.DataFrame({'pop':[35,318]},index=multi_index)
In [4]: df
Out[4]:
pop
country sex
CAN total 35
USA total 318

然后我从该 DataFrame 中删除一些行:

In [5]: df = df.query('pop > 100')

In [6]: df
Out[6]:
pop
country sex
USA total 318

但是当我查阅 MutliIndex 时,它的级别中仍然包含两个国家。

In [7]: df.index.levels[0]
Out[7]: Index([u'CAN', u'USA'], dtype='object')

我可以用一种相当奇怪的方式自己解决这个问题:

In [8]: idx_names = df.index.names

In [9]: df = df.reset_index(drop=False)

In [10]: df = df.set_index(idx_names)

In [11]: df
Out[11]:
pop
country sex
USA total 318

In [12]: df.index.levels[0]
Out[12]: Index([u'USA'], dtype='object')

但这看起来相当困惑。有没有更好的方法我想念?

最佳答案

来自版本pandas 0.20.0+使用 MultiIndex.remove_unused_levels :

print (df.index)
MultiIndex(levels=[['CAN', 'USA'], ['total']],
labels=[[1], [0]],
names=['country', 'sex'])

df.index = df.index.remove_unused_levels()

print (df.index)
MultiIndex(levels=[['USA'], ['total']],
labels=[[0], [0]],
names=['country', 'sex'])

关于python - 切片 DataFrame 后如何更新 pandas MultiIndex 的级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28772494/

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