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

过滤DataFrame后将列值复制到另一列:求更简洁实现方案

优雅实现Pandas DataFrame过滤后列值复制

通用方案:定义过滤掩码(Mask)复用

这是适配所有过滤场景的最优方案,彻底避免重复编写过滤逻辑:

import pandas as pd

df = pd.DataFrame({'Name': ['A', None, 'C'], 'Correction': [None, 'B', 'Q']})

# 一次性定义过滤条件,全程复用
mask = df['Name'].isna() & df['Correction'].notna()

# 仅对符合条件的行执行赋值操作
df.loc[mask, 'Name'] = df.loc[mask, 'Correction']

优势:

  • 过滤逻辑仅编写一次,大幅提升代码可读性与可维护性
  • 适配所有场景:无论过滤条件是NaN判断、数值匹配还是字符串规则,只需修改mask定义即可
  • 减少重复索引DataFrame的操作,执行效率更高

特定场景简化方案(仅针对NaN填充)

如果你的需求就是用Correction列非NaN的值填充Name列的NaN,可以用更简洁的专用方法实现:

方法1:使用combine_first

df['Name'] = df['Name'].combine_first(df['Correction'])

方法2:简化fillna调用

df['Name'] = df['Name'].fillna(df['Correction'])

这两种方法的效果和你最初的fillna实现完全一致,但代码更精炼,底层已做性能优化。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:09:24