python - Pandas 数据框多索引索引
问题描述
我有一个这样的数据框:
d
a b c
a1 b1 c1 10
b2 c2 11
a2 b3 c3 12
b4 c4 1
a3 b5 c5 2
a
,b
和c
是multi_index
列,我试图根据一个或多个索引列的值引用一些行。如何使用这些索引列的某种组合来过滤行?我尝试使用.loc
,但没有得到我想要的结果:
理想的情况是传递一个包含我想要的索引值的列表,这样我就可以动态地传递我想要的参数。但在下面的示例中,它不起作用。
>>> x.loc[['a1', 'b1', 'c1']]
d
a b c
a1 b1 c1 10
b2 c2 11
我看到这有效:
>>> x.loc['a1', 'b1', 'c1']
d 10
但x.loc['a1', 'c1']
返回错误。
毕竟,.loc
在处理multi-index
价值观时如何运作?我没有找到回答这个问题的其他问题(可能是因为我使用了错误的关键字,我不知道......)。
我的最终目标是使用多索引列的值(有时不是所有列)并获取对应的行。
解决方案
根据您使用的 pandas 版本,也可能会有不同的结果。查看您的示例,由于您的数据框只有一列,请注意它在某些时候不会转换为系列。
# Code to illustrate pandas upgrade:
import pandas as pd
cats = ['A', 'B']
groups = ['x','y','z']
idx = pd.MultiIndex.from_product((cats,groups))
df = pd.DataFrame(data=range(6), index=idx) # Dataframe
ser = pd.Series(data=range(6), index=idx) # Series
df.loc[pd.IndexSlice['A','y':],:] # This works for both pandas
ser.loc[pd.IndexSlice['A','y':],:] # This only works in older pandas
ser.loc[pd.IndexSlice['A','y':]] # This works in new pandas and old pandas`
pandas 1.2.x 抛出的错误是:
TypeError: unhashable type: 'slice'
推荐阅读
- php - Yii2 中的本地组件是什么?
- spring - 没有 Spring Boot 和 @EnableAutoConfiguration 的 Spring Boot 2 执行器
- podio - Podio 和 Zoho 人员之间的 Webhook 集成
- opencv - 与 opencv cv::resize 一起使用的巨大 virt 内存
- neo4j - 在 websphere 应用服务器中为 neo4j 创建数据源时出错
- angular - http-server -p 8082 显示 ERR_INVALID_REDIRECT
- xamarin.forms - xamarin shell:动态生成路由页面
- python - 在 Python 中加载 AutoCAD DWG 文件
- c# - 如何解决 ARKitSample 项目的子节点快照问题?
- java - 当文件位于java项目中时,如何在Java中读取excel文件?