如何保留DataFrame中某列值在另一列存在多匹配的行?
问题:筛选DataFrame中满足特定匹配条件的行
需求:保留DataFrame中符合以下规则的行——若number列的某个值对应的letter列匹配项(去重后)数量超过1,则保留该number值对应的所有行。
输入数据:
number, letter 1, A 2, B 5, D 2, D 2, D 5, D
解决方案
使用Pandas可以快速实现这个筛选逻辑,步骤如下:
- 分组统计每个
number对应的唯一letter数量 - 筛选出唯一
letter数量大于1的number值 - 用这些值过滤原DataFrame
代码实现
import pandas as pd # 构造输入DataFrame df = pd.DataFrame({ 'number': [1, 2, 5, 2, 2, 5], 'letter': ['A', 'B', 'D', 'D', 'D', 'D'] }) # 统计每个number对应的不重复letter数量 unique_letter_counts = df.groupby('number')['letter'].nunique() # 获取符合条件的number列表 target_numbers = unique_letter_counts[unique_letter_counts > 1].index # 过滤得到结果 filtered_df = df[df['number'].isin(target_numbers)] # 输出结果(转为CSV格式) print(filtered_df.to_csv(index=False))
预期输出
number,letter 2,B 2,D 2,D
逻辑说明
groupby('number')['letter'].nunique():按number分组后,统计每组内不重复的letter数量,这里number=2对应2个唯一值(B、D),number=1和5都只有1个唯一值。isin(target_numbers):只保留原DataFrame中number属于符合条件列表的行,最终得到number=2的所有行。
内容的提问来源于stack exchange,提问作者nerd
相关产品推荐
相关产品推荐

