如何在Pandas中按行而非按列识别重复值?
Pandas 按行提取多列重复值的实现方法
你需要的是按行识别多列间重复出现的值,和现有按列判断行重复的逻辑完全不同。我们可以通过逐行统计值的出现频率,筛选出重复值并格式化输出,直接实现你想要的效果。
实现代码
import pandas as pd # 初始化目标数据框 df2 = pd.DataFrame({ "A":["foo", "foo", "foo", "bar"], "B":[0,1,1,1], "C":["A","foo","B","bar"], "D":["bar","bar","B","foo"], "E":["bar","bar","B","foo"] }) # 定义行处理函数:提取当前行中出现≥2次的值 def extract_row_duplicates(row): # 统计每行各值的出现次数 count = row.value_counts() # 筛选重复值并排序(保证输出顺序和预期一致) dup_values = count[count >= 2].index.tolist() # 转为逗号分隔的字符串,无重复值则返回空 return ', '.join(sorted(dup_values)) if dup_values else '' # 按行应用函数,生成dup列 df2['dup'] = df2.apply(extract_row_duplicates, axis=1) # 输出结果 print(df2)
运行结果
A B C D E dup 0 foo 0 A bar bar bar 1 foo 1 foo bar bar foo, bar 2 foo 1 B B B B 3 bar 1 bar foo foo bar, foo
逻辑说明
axis=1指定apply按行处理,每行数据会以Series形式传入函数row.value_counts()快速统计当前行内每个值的出现次数- 筛选出出现次数≥2的值,排序后用逗号连接成字符串,确保输出格式和预期一致
- 无重复值时返回空字符串,避免出现
NaN
内容的提问来源于stack exchange,提问作者tonydanza123
相关产品推荐
相关产品推荐

