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

Python Pandas基于多列条件替换列值并清空指定列的实现问题

pandas DataFrame列值替换问题

初始数据

import pandas as pd
import numpy as np

data_in = {'A':['A1', '', '', 'A4',''],
        'B':['', 'B2', 'B3', '',''],
        'C':['C1','C2','','','C5']}
df_in = pd.DataFrame(data_in)

print(df_in)

初始输出:

A   B   C
0  A1      C1
1      B2  C2
2      B3    
3  A4        
4          C5

需求说明

实现逻辑:若C列不为空,且对应行A列或B列不为空,则将A列或B列的值替换为C列的值,替换完成后清空该行C列的内容。
期望输出:

A   B   C
0   C1      
1       C2  
2       B3  
3   A4      
4           C5

现有代码问题

原有代码的条件逻辑分支写反,且没有补充C列清空逻辑,np.where的错误判断规则导致A4、B3被覆盖为空,C列原值也没有被清除。
原有错误代码:

df_in['A'] = np.where(
   (df_in['A'] !='') & (df_in['C'] != '') , df_in['A'], df_in['C']
)

df_in['B'] = np.where(
   (df_in['B'] !='') & (df_in['C'] != '') , df_in['B'], df_in['C']
)

错误输出:

A   B   C
0   C1      C1
1       C2  C2
2           
3           
4           C5

修正后代码

# 标记C列不为空的行
mask_c_not_empty = df_in['C'] != ''
# 替换符合条件的A列值
df_in.loc[mask_c_not_empty & (df_in['A'] != ''), 'A'] = df_in['C']
# 替换符合条件的B列值
df_in.loc[mask_c_not_empty & (df_in['B'] != ''), 'B'] = df_in['C']
# 清空完成替换的行C列值
df_in.loc[mask_c_not_empty & ((df_in['A'] != '') | (df_in['B'] != '')), 'C'] = ''

print(df_in)

运行后即可得到符合要求的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:36:05