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

如何使用Pandas删除DataFrame中所有分数列值完全相同的行

嘿,我来帮你搞定这个需求——你需要移除那些所有score列数值完全相同的行,而且后续还会新增更多score列,所以得用不依赖固定列数的灵活写法,对吧?

解决方案:动态删除所有score列数值一致的DataFrame行

核心思路

我们可以通过动态匹配score列+判断每行score值的唯一性来实现,不管以后新增多少score列,代码都能自动适配。

具体代码实现

import pandas as pd

# 你的原始数据集
data = [[7, 10, 10, 10, 10], [17, 10, 10, 10, 10], [18, 8, 10, 10, 10], [20, 10, 10, 9, 9], [25, 9, 8, 8, 7]]
df = pd.DataFrame(data, columns=['person_id', 'score_1', 'score_2', 'score_3', 'score_4'])

# 第一步:动态捕获所有score列(不管以后加多少个都能识别)
score_columns = [col for col in df.columns if col.startswith('score_')]

# 第二步:过滤掉所有score值完全相同的行
# 方法1:用nunique()判断每行唯一值数量是否大于1
filtered_df = df[df[score_columns].nunique(axis=1) > 1]

# 方法2:对比每行所有score值是否等于该行第一个score值(两种方法效果一致,选哪个都行)
# filtered_df = df[~(df[score_columns] == df[score_columns].iloc[:, 0]).all(axis=1)]

print(filtered_df)

代码解释

  • 动态匹配score列:[col for col in df.columns if col.startswith('score_')]会自动抓取所有以score_开头的列,哪怕以后新增score_5、score_6这类列,代码也不需要修改。
  • nunique(axis=1):计算每行score列的唯一值数量,如果数量大于1,说明该行的score值不全相同,我们就保留这一行。
  • 第二种方法逻辑:先把每行的每个score值和该行第一个score值做对比,生成布尔矩阵;再用.all(axis=1)判断该行是否所有对比结果都是True(即所有score值相同),最后用~取反,保留不符合“全相同”条件的行。

运行结果

执行代码后,会得到你期望的输出:

person_id  score_1  score_2  score_3  score_4
2         18        8       10       10       10
3         20       10       10        9        9
4         25        9        8        8        7

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 11:43:14