如何用Pandas中同行其他列的值替换指定列的特定值
解决DataFrame中替换Payee列'DEBIT'值为对应Memo列内容的问题
先构造示例DataFrame(匹配你的场景)
import pandas as pd data = { 'Payee': ['DEBIT', 'Grocery Store', 'DEBIT', 'Gas Station'], 'Memo': ['FC02-0224-0185673-83 mom ball tickets', 'Weekly groceries', 'Online subscription renewal', 'Fill up tank'] } df = pd.DataFrame(data)
方法1:使用loc索引直接修改(最直观)
通过布尔索引定位Payee列等于'DEBIT'的行,直接将这些行的Payee值替换为同一行的Memo值:
df.loc[df['Payee'] == 'DEBIT', 'Payee'] = df['Memo']
方法2:使用where函数
where会保留满足条件的原数值,不满足条件的则替换为指定值。这里我们保留非'DEBIT'的Payee值,将'DEBIT'替换为对应Memo:
df['Payee'] = df['Payee'].where(df['Payee'] != 'DEBIT', df['Memo'])
方法3:正确使用mask函数(纠正你之前的用法)
mask的逻辑是当条件为True时替换值,刚好适配需求——当Payee等于'DEBIT'时,用Memo值替换:
df['Payee'] = df['Payee'].mask(df['Payee'] == 'DEBIT', df['Memo'])
验证结果
执行任意一种方法后,打印df即可看到替换效果:
print(df)
输出示例:
Payee Memo 0 FC02-0224-0185673-83 mom ball tickets FC02-0224-0185673-83 mom ball tickets 1 Grocery Store Weekly groceries 2 Online subscription renewal Online subscription renewal 3 Gas Station Fill up tank
补充:为什么replace可能失效?
如果你之前用的是df['Payee'].replace('DEBIT', df['Memo']),这种写法是全局替换逻辑,replace会把所有'DEBIT'替换为df['Memo']的整个Series,而非对应行的匹配值,所以无法达到预期效果。
内容的提问来源于stack exchange,提问作者Nicholas Coetzee
相关产品推荐
相关产品推荐

