如何在Pandas中合并DataFrame并将缺失列值填充为0
解决Pandas按指定键合并并保留目标DataFrame所有行的问题
你当前使用的inner连接只会保留两个DataFrame共有的行,要实现保留b的所有行、缺失值填充0的需求,可以按以下步骤操作:
完整实现代码
import pandas as pd # 构造示例数据(可替换为你的实际DataFrame) a = pd.DataFrame({ 'Sector': ['Energy', 'Index Fund', 'Technology', 'Utilities'], 'Still Have': [10000, 20000, 20000, 5000] }) b = pd.DataFrame({ 'Sector': ['Communications', 'Consumer Cyclical', 'Consumer Defensive', 'Energy', 'Healthcare', 'Index Fund', 'Materials', 'Technology', 'Utilities'], 'Ideal Mrkt Value': [15000, 20000, 10000, 5000, 10000, 25000, 5000, 100000, 5000] }) # 1. 执行右连接,保留b的所有行 merged_df = pd.merge(a, b, on='Sector', how='right') # 2. 将Still Have列的缺失值填充为0,并转换为整数类型 merged_df['Still Have'] = merged_df['Still Have'].fillna(0).astype(int) # 3. 调整列顺序(可选,与期望结果对齐) merged_df = merged_df[['Sector', 'Ideal Mrkt Value', 'Still Have']] print(merged_df)
输出结果
Sector Ideal Mrkt Value Still Have 0 Communications 15000 0 1 Consumer Cyclical 20000 0 2 Consumer Defensive 10000 0 3 Energy 5000 10000 4 Healthcare 10000 0 5 Index Fund 25000 20000 6 Materials 5000 0 7 Technology 100000 20000 8 Utilities 5000 5000
关键说明
how='right':指定右连接,会强制保留右表(b)的所有行,左表(a)中无匹配的行对应列会填充为NaNfillna(0):将Still Have列的缺失值替换为0,满足需求中的填充规则astype(int):由于填充NaN后列类型会自动转为float,转换为整数可与原数据类型保持一致
内容的提问来源于stack exchange,提问作者La Myass
相关产品推荐
相关产品推荐

