如何查找Pandas DataFrame中指定列取值不成对出现的行
Pandas 筛选 column2 取值出现次数为奇数的行方案
你可以通过统计column2每个取值的出现次数,过滤出次数为奇数的取值后匹配原表即可实现需求,2万行数据量下运行无性能压力。
方法1:可读性较高的分步写法
import pandas as pd # 统计column2每个取值的出现次数 val_counts = df['column2'].value_counts() # 筛选出出现次数为奇数的取值列表 odd_vals = val_counts[val_counts % 2 == 1].index # 过滤原表得到结果 result = df[df['column2'].isin(odd_vals)]
方法2:一行代码简洁写法
用groupby+transform直接在原表生成统计标签过滤:
result = df[df.groupby('column2')['column2'].transform('count') % 2 == 1]
特殊场景处理
如果某个取值出现3/5等奇数次数,上述方法会返回该取值对应的所有行,如果你只需要保留每个奇数取值的1行,可在上述结果后增加去重逻辑:
# keep='first'保留第一个出现的行,keep='last'保留最后一个出现的行 result = result.drop_duplicates(subset='column2', keep='last')
用你给出的示例数据测试,上述代码输出完全符合预期结果。
内容的提问来源于stack exchange,提问作者xzk
相关产品推荐
相关产品推荐

