如何基于A列并集合并两个DataFrame并填充对应列数据?
解决方案:基于A列并集合并两个DataFrame
嘿,这事儿不难,咱们一步步来实现你要的效果:
首先,核心思路是用**外连接(outer join)**来获取A列的并集,然后重命名列,最后把缺失值补成0就行。
完整代码示例
import pandas as pd # 定义原始DataFrame df1 = pd.DataFrame({'A' : ['a','b','c'], 'B' : [10,20,30], 'C' : [2,5,3]}) df2 = pd.DataFrame({'A' : ['a','b','d'], 'B' : [34,21,45], 'C' : [1,5,5]}) # 1. 外连接合并,保留A列的所有值 merged_df = pd.merge(df1, df2, on='A', how='outer', suffixes=('_f', '_d')) # 2. 重命名列,对应你要的命名规则 merged_df = merged_df.rename(columns={ 'B_f': 'f_M', 'C_f': 'd_M', 'B_d': 'f_B', 'C_d': 'd_B' }) # 3. 把缺失值填充为0,然后重置索引(让索引从0开始) merged_df = merged_df.fillna(0).reset_index(drop=True) # 调整列的顺序,和你期望的输出一致 merged_df = merged_df[['A', 'f_M', 'd_M', 'f_B', 'd_B']] # 可选:把数值列转成整数类型(默认是float,因为填充了NaN) merged_df = merged_df.astype(int) print(merged_df)
代码细节解释
- 外连接(how='outer'):确保A列的所有值(包括df1独有的
c和df2独有的d)都被保留,不会丢失任何一行数据。 - suffixes参数:给两个DataFrame中重名的列(B、C)加上后缀,避免合并后列名冲突,方便后续重命名。
- rename():把带后缀的列改成你需要的
f_M、d_M、f_B、d_B,完全匹配你的命名要求。 - fillna(0):把合并后缺失的数值(比如
c对应的df2的B、C值,d对应的df1的B、C值)统一填充为0。 - astype(int):因为填充NaN后数值会变成float类型,这一步可以把所有数值列转成整数,和你期望的输出格式完全一致。
运行这段代码后,输出结果如下:
A f_M d_M f_B d_B 0 a 10 2 34 1 1 b 20 5 21 5 2 c 30 3 0 0 3 d 0 0 45 5
内容的提问来源于stack exchange,提问作者ubuntu_noob
相关产品推荐
相关产品推荐

