python - 为什么多索引数据框会在选择后返回所有索引?
问题描述
我发现关于多索引数据框的一件事很奇怪:
对于一个非常简单的df:
import pandas as pd
df = pd.DataFrame([{'Name': 'Chris', 'Item Purchased': 'Sponge', 'Cost': 22.50},
{'Name': 'Kevyn', 'Item Purchased': 'Kitty Litter', 'Cost': 2.50},
{'Name': 'Filip', 'Item Purchased': 'Spoon', 'Cost': 5.00}],
index=['Store 1', 'Store 2', 'Store 3'])
df3 = df.reset_index()
df3 = df3.set_index(['index', 'Name'])
如果我只想获得指数大于 4 美元的成本。很容易选择:
df4 = df3[df3['Cost'] > 4]
df4
但是当我尝试从 index 获取 store id 时:
df4.index.levels[0]
应该只有Store 1和Store 3,但实际结果:
Index(['Store 1', 'Store 2', 'Store 3'], dtype='object', name='index')
因此,即使在选择之后,索引似乎仍会返回原始索引中的所有成员。
有人可以帮助我为什么会发生这种情况,选择后如何获得正确的索引?
谢谢。
解决方案
使用MultiIndex.remove_unused_levels
:
df4.index = df4.index.remove_unused_levels()
print (df4.index.levels[0])
推荐阅读
- asp-classic - 经典 ASP:LDAP 查询和别名
- database - 什么是 p6spy?我在 db url 中得到这个
- java - Maven org.opentest4j.AssertionFailedError 即使值相同
- javascript - Webpack 开发服务器编译成功但重新加载或重建不起作用
- c# - 将新记录插入到记录MongoDB C#上的对象上的数组中
- python - 将浮点数乘以 100 时的 Python 3.8.5 奇怪行为
- python - 如何在 C# 中使用 pytorch 模型?
- python - panda 数据框按 ID 和日期聚合
- javascript - ServiceNow - 在中间服务器中更改文件名
- javascript - “错误:超时 - 在 jest.setTimeout 指定的 5000 毫秒超时内未调用异步回调。” 如何使我的测试用例独立?