python - 如何过滤 Pandas 数据框以显示顶级类别的行?
问题描述
我有一个movies
包含数千个电影数据的数据框,它基本上看起来像这样:
| | MovieTitle | Genre | Studio |
------------------------------------------------------------
| 0 | Tomorrowland | action | Buena Vista Studios |
| 1 | White House Down | action | Sony |
| 2 | Doctor Dolittle | adventure | Fox |
我正在尝试过滤数据框以显示制作 10 部电影或更多电影的工作室的电影。我尝试使用以下代码获得顶级工作室:
top10 = (movies.groupby('Studio').size() > 10)
以上正确返回了一系列工作室和一个布尔值,指示他们是否有 10 多部电影,如下所示:
| Studio | |
--------------------------------
| Art House Studios | False |
| Buena Vista Studios | True |
| DreamWorks | True |
| Lionsgate | False |
因此,我想检索具有True
上述系列的工作室,以使用它们对数据框进行子集movies
化isin()
:
top10 = top10[top10 == True].axes
print(top10)
上面的打印命令输出如下内容:
Index(['Buena Vista Studios', 'WB', 'Fox', 'Universal', 'Sony',
'Paramount Pictures', 'New Line Cinema', 'Pacific Data/DreamWorks',
'DreamWorks', 'MiraMax'],
dtype='object', name='Studio')
最后,我想使用上面的列表来过滤movies
数据框:
movies[movies['Studio'].isin(top10)]
这会导致一个空的 dataframe。但是,像这样直接使用输出列表:
movies[movies['Studio'].isin(['Buena Vista Studios', 'WB', 'Fox', 'Universal', 'Sony',
'Paramount Pictures', 'New Line Cinema', 'Pacific Data/DreamWorks',
'DreamWorks', 'MiraMax'])]
确实返回正确的过滤数据帧。所以top10
它的行为不像一个列表,尽管type(top10)
它确实表明它是一个列表。
我在这里做错了什么?有没有一种更简单的方法来过滤数据框以显示制作了 10 部电影或更多电影的工作室的电影?
解决方案
将代码更改top10 = top10[top10 == True].axes
为
top10 = top10.index[top10 == True]
将解决问题而无需更改任何其他内容。
希望能帮助到你。
推荐阅读
- apache-spark - 如何将 RDD[Array[Any]] 转换为 DataFrame?
- proxy - 使用多个 AD/LDAP 服务器配置 LDAP 代理服务器
- angular - 使用输入 matDatepickerFilter 无法完全控制日期选择器验证
- git - 如何从 github,不克隆 git-lfs 管理的大文件?
- python - 使用 sklearn 的岭回归制作 L 曲线
- amazon-web-services - 如何从powershell自行终止EC2?
- python - 为什么数据透视表将浮动显示更改为不同的内容?
- vue.js - Cloudflare Workers - 带有 Vuejs 的 SPA
- java - 不同包中的两个导出类可以在不公开其成员的情况下进行交互吗?
- spreadsheetgear - IRange.Copy 为合并的单元格抛出 InvalidOperationException