python - 如何根据特定条件过滤重复行
问题描述
我有一个看起来像这样的数据框,但行数更多:
id status year
1 yes 2013
1 no 2013
1 yes 2014
3 no 2012
4 yes 2014
6 no 2014
我想过滤数据框,以便如果两行之间的 id 和 year 列相同,但状态列不同,则只保留状态为“是”的行。如果 id 和 year 组合的“no”没有与之关联的“yes”,我仍然想保留它。这导致我无法仅过滤状态列以仅具有“是”的行的问题。
这导致我无法仅过滤状态列以仅具有“是”的行的问题。
生成的数据框应如下所示,其中第一个数据框上的第二行将被取出,因为 ID 1 和 2013 年具有与之关联的“是”。但是 ID 为 3 和 6 的行仍然存在,因为这些 ID 和年份组合没有关联:
id status year
1 yes 2013
1 yes 2014
3 no 2012
4 yes 2014
6 no 2014
解决方案
您可以计算两个条件:
- 一个使用
groupby
,transform
和nunique
, 和 - 另一个与状态有关的
或两个面具,并过滤df
:
m1 = df.groupby(['id','year']).status.transform('nunique').eq(1)
m2 = df.status.eq('yes')
df[m1 | m2]
id status year
0 1 yes 2013
2 1 yes 2014
3 3 no 2012
4 4 yes 2014
5 6 no 2014
推荐阅读
- typescript-compiler-api - TypeScript Compiler API:如何使用已解析的类型参数获取类型?
- python - 从 Databricks 下载 Plotly HTML
- python - Python:带有画布的 Tkinter 中的滚动条
- c++ - 有订单保证的阻塞队列
- javascript - 刷新子php页面onchange
- azure-devops - 如何管理事件通知给单个成员而不是整个团队?
- blazor - 页面刷新或直接链接时最外层 CascadingValue 丢失
- vue.js - BootstrapVue 表的可排序标题单元格上的工具提示
- sql-server - SQL Server 中的“对于 Xml 路径”
- ios - App crashes on CGContext.drawPDFPage with a EXC_BAD_ACCESS