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

当DataFrame中两列值相等时用0替换指定列值的实现需求

解决方案

方法1:布尔索引(推荐,高效)

直接通过布尔条件定位目标行,批量修改Marks2的值,适合处理大规模数据集:

import pandas as pd

# 初始化原始DataFrame
df1 = pd.DataFrame({'Name1':['A','B','A','B','B','C','C','C','E','E','E'],
                    'Name2':['A','B','D','C','D','D','A','B','A','B','C'],
                    'Marks2':['Nan','Nan',6,50, 88,'Nan',140,9,'Nan',65,70]})

# 定位Name1与Name2相等的行,将对应Marks2设为'0'
df1.loc[df1['Name1'] == df1['Name2'], 'Marks2'] = '0'

# 可选:将Marks2转为数值类型(把字符串'Nan'转为真正的NaN,方便后续数值计算)
df1['Marks2'] = pd.to_numeric(df1['Marks2'], errors='coerce')

print(df1)

方法2:apply逐行判断

如果需要更灵活的行级逻辑处理,可以用apply遍历每一行:

import pandas as pd

df1 = pd.DataFrame({'Name1':['A','B','A','B','B','C','C','C','E','E','E'],
                    'Name2':['A','B','D','C','D','D','A','B','A','B','C'],
                    'Marks2':['Nan','Nan',6,50, 88,'Nan',140,9,'Nan',65,70]})

# 逐行判断并替换值
df1['Marks2'] = df1.apply(lambda row: '0' if row['Name1'] == row['Name2'] else row['Marks2'], axis=1)

# 可选转换数值类型
df1['Marks2'] = pd.to_numeric(df1['Marks2'], errors='coerce')

print(df1)

最终结果

执行代码后得到的DataFrame如下:

Name1Name2Marks2
0AA0.0
1BB0.0
2AD6.0
3BC50.0
4BD88.0
5CDNaN
6CA140.0
7CB9.0
8EANaN
9EB65.0
10EC70.0

说明

  • 原始Marks2列存储的是字符串(含'Nan'字符串),如果不需要数值计算,可以跳过pd.to_numeric步骤,此时替换后的0为字符串类型。
  • 布尔索引方法的执行效率远高于apply,优先推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:25:26