如何将处理后DataFrame指定行回填至原DataFrame并支持仅粘贴相同列
问题与解决方案
场景还原
自定义数据集:
import pandas as pd data = pd.DataFrame([['A','B'],[1,None],['B','C'],[2,None]], columns=['a1','a2'])
生成的初始DataFrame:
a1 a2 0 A B 1 1 None 2 B C 3 2 None
筛选a2列非缺失的行:
dropdf = data.dropna(axis=0, subset=['a2'])
得到的筛选后数据:
a1 a2 0 A B 2 B C
对dropdf处理后新增a3列,结果如下:
a1 a2 a3 0 A B C 2 B C D
需求:将dropdf中新增的列回填至原data,忽略被dropna剔除的行,同时保留原data的行顺序,最终得到:
a1 a2 a3 0 A B C 1 1 None None 2 B C D 3 2 None None
解决方案
可以通过索引匹配赋值或索引合并两种方式实现,仅回填目标列,不影响原数据结构:
方法1:直接索引赋值
因为dropdf保留了原data的行索引,直接将目标列赋值给原数据集即可,缺失行自动填充为NaN,按需可转为None:
# 回填a3列 data['a3'] = dropdf['a3'] # 可选:将NaN转为None data['a3'] = data['a3'].where(pd.notna(data['a3']), None)
方法2:基于索引的合并
使用merge方法,指定按索引合并,保留原数据集的所有行和顺序:
data = data.merge(dropdf[['a3']], left_index=True, right_index=True, how='left') # 可选:将NaN转为None data['a3'] = data['a3'].where(pd.notna(data['a3']), None)
两种方法都能精准回填目标列,完全满足需求。
内容的提问来源于stack exchange,提问作者Tuấn Nguyễn Quang
相关产品推荐
相关产品推荐

