使用相等条件替换DataFrame值:Name1与Name2相等时Marks2置0
解决方案
先处理数据里的'Nan'字符串(转换为Pandas标准缺失值),再通过布尔索引定位目标行完成替换,具体实现如下:
完整代码示例
import pandas as pd import numpy as np # 原始数据 df1 = pd.DataFrame({'Name1':['A','B','D','B','B','C','C','C','E','E','E'], 'Name2':['A','B','D','C','D','D','A','B','A','B','C'],'Marks2':[30,40,6,50, 88,'Nan',140,9,'Nan',65,70]}) # 将字符串'Nan'替换为标准缺失值NaN df1['Marks2'] = df1['Marks2'].replace('Nan', np.nan) # 定位Name1与Name2相等的行,把对应Marks2值设为0 df1.loc[df1['Name1'] == df1['Name2'], 'Marks2'] = 0 print(df1)
代码说明
- 处理字符串缺失值:原始数据中的
'Nan'是字符串类型,无法直接参与数值操作,用replace('Nan', np.nan)转换为Pandas可识别的缺失值,保证后续逻辑正常运行。 - 布尔索引定位:
df1['Name1'] == df1['Name2']生成布尔序列,标记每行是否满足两列取值相等的条件;结合loc可以精准定位目标行和列,完成赋值操作。
执行结果
Name1 Name2 Marks2 0 A A 0.0 1 B B 0.0 2 D D 0.0 3 B C 50.0 4 B D 88.0 5 C D NaN 6 C A 140.0 7 C B 9.0 8 E A NaN 9 E B 65.0 10 E C 70.0
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

