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

如何筛选Pandas DataFrame中同一行任意两列值相等的行?

筛选DataFrame中存在任意列值相等的行

需求说明

需要筛选Pandas DataFrame中同一行内任意两不同列值相等的行,需覆盖所有两两列组合:

  • col1与col2、col3、col4
  • col2与col3、col4
  • col3与col4

当前仅能实现col2与col3的相等判断,需扩展逻辑。


解决方案(无需迭代,用Pandas向量化操作)

方案1:利用nunique()批量判断行内重复值

该方法通过计算每行的唯一值数量来判断是否存在重复:若唯一值数量小于列数,说明该行至少有一对不同列值相等。优点是扩展性强,列数变化时无需修改代码。

完整代码
# -*- coding: utf-8 -*-
import pandas as pd

# 构建原始DataFrame
rows = {
    'col1':['5412','5148','5800','2122','5645','1060','4801','1039'],
    'col2':['542','512','541','412','565','562','645','152'],
    'col3':['542','3120','3410','2112','5650','5620','4801','152'],
    'col4':['5800','2122','5645','2112','412','562','562','645']
}
df = pd.DataFrame(rows)
print(f'原始DataFrame \n\n{df}')

# 筛选存在任意列值相等的行
filtered_df = df[df.nunique(axis=1) < df.shape[1]]
print('\n\n符合条件的行:')
print(filtered_df)

# 移除符合条件的行(保留所有列值唯一的行)
dropped_df = df[df.nunique(axis=1) == df.shape[1]]
print('\n\n移除符合条件后的行:')
print(dropped_df)
输出结果

符合条件的行:

col1  col2  col3   col4
0  5412   542   542   5800
3  2122   412  2112  2112
5  1060   562  5620    562
6  4801   645  4801    562
7  1039   152   152    645

方案2:手动枚举所有两两列比较

若需明确指定检查的列组合,可手动生成所有两两列的相等条件,再通过逻辑或(|)组合判断。

核心代码片段
# 生成所有两两列的相等条件
condition = (
    (df['col1'] == df['col2']) |
    (df['col1'] == df['col3']) |
    (df['col1'] == df['col4']) |
    (df['col2'] == df['col3']) |
    (df['col2'] == df['col4']) |
    (df['col3'] == df['col4'])
)

# 筛选符合条件的行
filtered_df = df[condition]
print('\n\n符合条件的行:')
print(filtered_df)

该方案逻辑直观,适合列数较少的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 15:05:06