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

基于重复列值筛选Pandas DataFrame(Python)

解决方案

你可以通过Pandas的分组(groupby)功能筛选符合条件的列,核心思路是检查每个Name分组内的所有行在该列上的值是否完全一致,以下是两种实用实现方法:

方法一:利用nunique()检查唯一值数量

每个Name分组恰好有两行,若某列在分组内的唯一值数量为1,说明两行值完全相同。只需筛选出所有分组都满足该条件的列:

import pandas as pd

# 构造示例DataFrame
data = {
    'Name': ['Alex', 'Alex', 'Sam', 'Sam', 'John', 'John'],
    '1': [10, 10, 30, 30, 50, 50],
    '2': [40, 60, 15, 12, 18, 15],
    '3': [20, 20, 50, 50, 100, 100],
    '4': [11, 11, 15, 15, 8, 8],
    '5': [50, 60, 60, 43, 32, 21]
}
df = pd.DataFrame(data)

# 按Name分组,计算每个列在分组内的唯一值数量
group_unique_counts = df.groupby('Name').nunique()
# 筛选出所有分组唯一值数量都是1的列
consistent_cols = group_unique_counts.columns[group_unique_counts.eq(1).all()].tolist()
# 保留Name列和符合条件的列
result = df[['Name'] + consistent_cols]
print(result)

输出结果:

Name   1    3   4
0   Alex  10   20  11
1   Alex  10   20  11
2    Sam  30   50  15
3    Sam  30   50  15
4   John  50  100   8
5   John  50  100   8

方法二:利用transform()检查组内值一致性

通过transform对每个分组内的列值进行检查,判断所有值是否与组内第一个值相同,再筛选出全部分组都满足条件的列:

# 检查每个分组内的列值是否全部等于组内第一个值
is_consistent = df.groupby('Name').transform(lambda x: x.eq(x.iloc[0]).all())
# 筛选出所有行都为True的列(即每个分组都满足一致性)
consistent_cols = is_consistent.columns[is_consistent.all()].tolist()
# 生成结果
result = df[['Name'] + consistent_cols]

两种方法最终效果一致,都能保留Name、1、3、4这几列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 22:15:49