python – 如何在切割其DataFrame后更新pandas MultiIndex的级别?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 如何在切割其DataFrame后更新pandas MultiIndex的级别?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1266字,纯文字阅读大概需要2分钟。
内容图文
![python – 如何在切割其DataFrame后更新pandas MultiIndex的级别?](/upload/InfoBanner/zyjiaocheng/714/d4d0834732f14099a52edca0d6c5ce21.jpg)
我有一个带有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')
但这似乎相当混乱.有没有更好的方法让我失踪?
解决方法:
这是以前咬过我的东西.出于性能和哲学原因,删除列或行不会更改基础MultiIndex,这正式不被视为错误(read more here).简短的回答是开发人员说“这不是MultiIndex的用途”.如果您需要修改后的MultiIndex级别的内容列表,例如迭代或检查是否包含某些内容,您可以使用:
df.index.get_level_values(<levelname>)
这将返回该索引级别中的当前活动值.
所以我想这里的“技巧”是API原生方式是使用get_level_values而不仅仅是.index或.columns
内容总结
以上是互联网集市为您收集整理的python – 如何在切割其DataFrame后更新pandas MultiIndex的级别?全部内容,希望文章能够帮你解决python – 如何在切割其DataFrame后更新pandas MultiIndex的级别?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。