基于Pandas在条件下过滤重复行

3

我有一个数据框,其中基于 "Reason" 列存在重复行。

No   Reason  
123  -
123  -
345  Bad Service
345  -
546  Bad Service
546  Poor feedback

我已根据以下条件对这些行进行了子集筛选:
df_duplicates = df[df['No'].duplicated() == True]

我正试图循环遍历上述行的子集,并在相应的重复行的“原因”既缺失时,过滤它们;或者任何一个缺失时,也要过滤。
因此结果将是:
No   Reason  
123  -
123  -
345  Bad Service
345  -

我尝试循环并按对处理。不确定是否有一种在 Pandas 中高效完成此操作的方法。如有线索,请提供帮助。
1个回答

2

仅在相应重复行的“原因”缺失时,或者任何一个原因缺失时,过滤它们。

您可以执行以下操作:

df[df['Reason'].eq('-').groupby(df['No']).transform('any')]
#or df[df['Reason'].isna().groupby(df['No']).transform('any')]

    No       Reason
0  123            -
1  123            -
2  345  Bad Service
3  345            -

3
太快了太猛了。我还在阅读问题 :) - Quang Hoang
@anky:谢谢你的回答。是否有一种方法可以包括值相同的行。例如,如果它们在两行中都有“糟糕的服务”,那么我希望它们出现在结果集中。 - user3447653
在这种情况下,您可以尝试执行 out = df[(df['Reason'].eq('-')|df.duplicated(['No','Reason'],keep=False)).groupby(df['No']).transform('any')] 来处理 NaN 值,请将 .eq('-') 替换为 .isna() - anky
@user3447653,你能使用我在评论中发布的代码吗? - anky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接