You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas DataFrame每行中提取重复值及对应行号

提取Pandas DataFrame中含重复值的行

需求说明

给定一个部分行存在重复值的Pandas DataFrame,需从Num1到Num7列中筛选出至少包含一个重复值的行,支持两种输出形式:

  1. 返回行号及对应行数据
  2. 返回行号及该行的重复值列表

示例数据

import numpy as np
import pandas as pd

df = pd.DataFrame([[1,1,2,4,5,6,7,7],
            [2,5,6,7,22,23,34,48],
            [3,3,5,6,7,45,46,48],
            [4,6,7,14,29,32,6,29], # 重复值:6、29
            [5,6,7,13,23,33,35,7], # 重复值:7
            [6,1,6,7,8,9,10,8],
            [7,0,2,5,7,19,7,5]], # 重复值:7、5
            columns = ['Row_Num', 'Num1','Num2','Num3','Num4','Num5','Num6','Num7'])

实现方法

步骤1:筛选含重复值的行

先指定需要检查重复值的列,再通过判断每行唯一值数量是否小于列数,筛选出存在重复值的行:

# 指定需检查重复值的列
check_cols = ['Num1','Num2','Num3','Num4','Num5','Num6','Num7']

# 生成筛选掩码:每行唯一值数量 < 列数则说明存在重复
mask = df[check_cols].nunique(axis=1) < len(check_cols)
# 筛选出目标行
filtered_df = df[mask].reset_index(drop=True)

输出形式1:行号+对应行数据

如果需要保留完整行数据,直接使用上述filtered_df即可。若要匹配你给出的预期结果1(仅保留到Num5列,且只保留含多个不同重复值的行),可添加额外筛选条件:

# 统计每行重复值的种类数
def count_duplicate_types(row):
    vc = row.value_counts()
    return len(vc[vc>1])

# 筛选出重复值种类≥2的行,并截取指定列
duplicate_type_count = filtered_df[check_cols].apply(count_duplicate_types, axis=1)
df2 = filtered_df[duplicate_type_count >=2][['Row_Num', 'Num1','Num2','Num3','Num4','Num5']].reset_index(drop=True)

运行结果与预期结果1一致:

Row_Num  Num1  Num2  Num3  Num4  Num5
0        4     6     7    14    29    32
1        7     0     2     5     7    19

输出形式2:行号+重复值列表

提取每行的重复值,整理为指定格式:

# 定义函数提取每行的重复值
def get_duplicate_values(row):
    value_counts = row.value_counts()
    return value_counts[value_counts > 1].index.tolist()

# 提取重复值列
filtered_df['duplicates'] = filtered_df[check_cols].apply(get_duplicate_values, axis=1)

# 转换为预期格式
df3 = filtered_df[['Row_Num']].join(pd.DataFrame(filtered_df['duplicates'].tolist(), index=filtered_df.index))
df3.columns = ['Row_Num', 'Num1', 'Num2']

# 同样筛选出重复值种类≥2的行
duplicate_type_count = filtered_df[check_cols].apply(count_duplicate_types, axis=1)
df3 = df3[duplicate_type_count >=2].reset_index(drop=True)

运行结果与预期结果2一致:

Row_Num  Num1  Num2
0        4     6    29
1        7     7     5

内容的提问来源于stack exchange,提问作者user20250014

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 19:37:47