如何合并Pandas DataFrame两行?用非NaN值填充缺失字段
合并Pandas DataFrame中两行并填充NaN值
用Pandas的combine_first()方法就能高效解决这个问题,它会自动保留目标行(Bill)的已有非空值,仅用来源行(Jim)的非空值填充目标行的NaN,完美适配多字段场景,不需要逐个单元格修改。
代码示例
首先模拟你的DataFrame结构:
import pandas as pd import numpy as np df = pd.DataFrame({ 'Name': ['Jim', 'Bill', 'Alice'], 'City': ['New York', np.nan, 'London'], 'Age': [30, 28, np.nan], 'Email': ['jim@example.com', 'bill@example.com', np.nan], # 可添加任意数量的字段,处理逻辑一致 'Phone': [np.nan, '123-4567', '987-6543'] })
执行合并操作:
# 定位Jim和Bill的行数据 jim_row = df[df['Name'] == 'Jim'].iloc[0] bill_row = df[df['Name'] == 'Bill'].iloc[0] # 合并:优先保留Bill的非空值,用Jim的非空值填充Bill的NaN merged_bill = bill_row.combine_first(jim_row) # 更新DataFrame中的Bill行 df.loc[df['Name'] == 'Bill'] = merged_bill # 若不需要保留Jim行,可删除 df = df[df['Name'] != 'Jim'].reset_index(drop=True)
关键说明
combine_first()会逐列处理两行数据:只有当Bill行的字段为NaN时,才会用Jim行对应字段的非NaN值填充;Bill行已有有效值的字段会完全保留,不会被覆盖。- 该方法支持任意数量的字段,无需针对每个字段单独编写逻辑。
内容的提问来源于stack exchange,提问作者Budd
相关产品推荐
相关产品推荐

