python - Pandas 多索引选择标准以及列选择标准
问题描述
我需要根据索引和列上的多个条件查询 Pandas 数据框。请在下面查看我的数据。'Country' 和 'Surname' 是两个独立的索引,而 'Name'、'Score'、'Type' 是列。
y = pd.DataFrame({'Name':['Nikhil', 'Ankit', 'Keval', 'Darpan', 'Rajesh', 'John', 'Lynda'],
'Score':[89,92,96,82,95,98,97],
'Type':['Fat','Slim','Fat','Slim','Fat','Slim','Slim'],
'Country':['India','USA','Denmark','Australia','Italy','China','Israel'],
'Surname':['Sharma','Sharma','Patel','Shah','Sharma','Sharma','Sharma']}
).set_index('Country').set_index('Surname', append=True)
我想选择符合以下条件的数据:
- 国家既不应该是印度也不应该是美国
- 姓氏应该是夏尔马
- 分数应等于或高于 90
- 类型应该是 Slim
解决方案
对于在列中或在 MultiIndex 级别中的选择,可以通过或query
与链式掩码一起使用:and
&
q='Country not in ["India","USA"] and Surname == "Sharma" and Score >= 90 and Type == "Slim"'
或者:
q = 'Country not in ["India","USA"] & Surname == "Sharma" & Score >= 90 & Type == "Slim"'
print (y.query(q))
Name Score Type
Country Surname
China Sharma John 98 Slim
Israel Sharma Lynda 97 Slim
替代boolean indexing
,但链接掩码是严格的&
:
m1 = ~y.index.get_level_values('Country').isin(["India","USA"])
m2 = y.index.get_level_values('Surname') == 'Sharma'
m3 = y['Score'].ge(90)
m4 = y['Type'].eq('Slim')
print (y[m1 & m2 & m3 & m4])
Name Score Type
Country Surname
China Sharma John 98 Slim
Israel Sharma Lynda 97 Slim
推荐阅读
- sqlite - 使用事务函数在 SQLite 中使用 React Native SQLite 存储模块创建多个表
- android - 由 java.lang.SecurityException 引发的 InstallReferrerClient.startConnection() 抛出
- node.js - Windows 实例上 AWS 上的 Node js 应用程序
- python - 如何从dict列表中的特定键打印列表的单个项目
- postgresql - 如何在 postgres 中缩短或优化 JOIN 查询
- wordpress - 联系表格 7 更改表格标签输出
- reactjs - 类型“{}”不可分配给类型“postList”
- javascript - 添加事件监听器
- javascript - 为什么我在 chrome 控制台中看不到我的对象反应?
- python - python matplotlib:如何控制y轴的位置