python - Python / Pandas:数据框多个过滤器
问题描述
我有以下数据框,它是比赛和结果的列表。
Date R H Fin Win
0 11182017 1 1 2 0
1 11182017 1 2 1 5
2 11182017 1 3 3 0
3 11182017 2 1 2 0
4 11182017 2 2 1 10
5 11182017 3 1 1 6
6 11182017 3 2 2 0
我希望能够先按种族(R)然后按马(H)过滤并返回结果。
对于上面的数据集,当 R = 1 时,我只想看到 H 1 和 2(即为 R 1 过滤掉 H 3)。对于R = 2,我只想看到H 1(即过滤掉R 2 的H 2),而对于R = 3,我只想看到H 2(即过滤掉R 3 的H 1)。我会通过最好通过提示设置变量来完成此操作。本质上,我试图从特定比赛中“抓”某些马
结果示例如下
Date R H Fin Win
0 11182017 1 1 2 0
1 11182017 1 2 1 5
3 11182017 2 1 2 0
6 11182017 3 2 2 0
解决方案
字典是存储比赛和马匹的一种选择,因为每次运行新的过滤设置时都不需要创建不必要的变量,这里我使用带有键 = 比赛和值 = 马列表的字典
d = {1:[1,2],2:[1]}
现在您可以使用该query
函数,它接受一个查询字符串。这可以通过迭代字典来完成
query_str = ' | '.join(['((R == {x}) and (H in {y}))'.format(x=x,y=y) for x,y in d.items()])
在此示例中,使用 list comp 生成的字符串如下所示
((R == 1) and (H in [1, 2])) | ((R == 2) and (H in [1]))
现在你可以运行
df.query(query_str)
并得到
Date Fin H R Win
0 11182017 2 1 1 0
1 11182017 1 2 1 5
3 11182017 2 1 2 0
用户输入创建字典的附加说明
代码
d = {}
x = input('Add races ')
for i in x:
d[i] = list(input('Add Horses for Race: {} '.format(i)))
print d
样品运行
Add races 1,2,3
Add Horses for Race: 1 1,2
Add Horses for Race: 2 2,3
Add Horses for Race: 3 3,4
{1: [1, 2], 2: [2, 3], 3: [3, 4]}
推荐阅读
- lua - source_file.lua:1:尝试调用一个 nil 值(全局“RegisterServerEvent”)
- android - 如何在服务中使用上下文?
- php - 我将如何使用 WPbakery 将此代码实施到我的 Wordpress 网站中
- java - 蛮力最长公共子序列
- svg - 如何在 SVG 中遮盖部分描边路径?
- docker - docker desktop 如何在 Windows 机器上运行 linux 容器
- angular6 - 如何检查 textarea 是否是焦点?
- php - 000webhost 没有从数据库中检索/获取数据,一些按钮和错误消息不起作用,但在 localhost 中它可以工作
- python - 是否有任何用于印地语单词搜索的 NLP 代码?
- angular - 未验证选择选项的 Angular 6 或 2+ 表单验证