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

基于另一列条件替换Pandas列值的实现方法

Pandas:仅当Column B非空时替换Column A的值

问题场景

我们有如下初始DataFrame,需要实现仅当Column B的值不为NaN时,将Column A替换为Column B的对应值,之后按Column A分组聚合Column C的和。

初始DataFrame

import pandas as pd
import numpy as np

df = pd.DataFrame({'Column A' : ['red','green','yellow', 'orange', 'red', 'blue'],
                   'Column B' : [np.nan, 'blue', 'purple', np.nan, np.nan, np.nan],
                   'Column C' : [1, 2, 3, 2, 3, 7]})
Column AColumn BColumn C
'red'NaN1
'green''blue'2
'yellow''purple'3
'orange'NaN2
'red'NaN3
'blue'NaN7

期望处理后结果

Column AColumn BColumn C
'red'NaN1
'blue''blue'2
'purple''purple'3
'orange'NaN2
'red'NaN3
'blue'NaN7

最优解决方案

直接使用pandas的矢量化操作fillna(),一行代码完成需求:

df['Column A'] = df['Column B'].fillna(df['Column A'])

原理说明

fillna()会遍历Column B的每一个值:

  • 当值不为NaN时,直接保留该值作为Column A的新值
  • 当值为NaN时,用Column A的原始值填充,完全匹配需求

这种方法无需硬编码索引,能自适应数据的新增、删除或索引变化,而且是矢量化操作,处理大数据集时效率远高于逐行处理的apply()。


备选方案(逐行处理,不推荐)

如果一定要用apply()实现,也可以写,但效率较低:

df['Column A'] = df.apply(lambda row: row['Column B'] if pd.notna(row['Column B']) else row['Column A'], axis=1)

验证聚合结果

处理完成后执行分组求和:

agg_result = df[['Column A', 'Column C']].groupby('Column A').sum()
print(agg_result)

输出结果:

Column C
Column A           
blue              9
orange            2
purple            3
red               4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:42:05