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

如何合并两个不同大小的Pandas DataFrame且不丢失条目?

解决Pandas合并DataFrame时保留所有行并替换NaN的问题

你使用的pd.merge()默认是内连接(inner join),只会保留两个DataFrame中Name列匹配的行,因此丢失了不匹配的条目。要实现需求,需要用**左连接(left join)**保留左表(alevel_count)的所有行,再将缺失值替换为0。

步骤1:左连接合并DataFrame

指定how='left',以alevel_count为基准保留所有行,右表中匹配不上的列会填充NaN:

merged_df = pd.merge(alevel_count, gcse_count, on='Name', how='left')

步骤2:将NaN替换为0

针对GCSEs列替换缺失值,或者全局替换所有列的缺失值:

# 仅替换GCSEs列的NaN
merged_df['GCSEs'] = merged_df['GCSEs'].fillna(0)

# 或者全局替换所有列的NaN
merged_df = merged_df.fillna(0)

完整示例代码

import pandas as pd

# 构造示例数据
alevel_count = pd.DataFrame({
    'Name': ['Joe Bloggs', 'Zane Valdez', 'Sherlock Holmes', 'Joseph Ryan', 'Christian Willis'],
    'ALevels': [3, 1, 4, 2, 1]
})

gcse_count = pd.DataFrame({
    'Name': ['Joe Bloggs', 'Zane Valdez', 'Sherlock Holmes'],
    'GCSEs': [5, 4, 2]
})

# 左连接合并
merged_df = pd.merge(alevel_count, gcse_count, on='Name', how='left')
# 替换NaN为0
merged_df['GCSEs'] = merged_df['GCSEs'].fillna(0)

print(merged_df)

输出结果

Name  ALevels  GCSEs
0        Joe Bloggs        3    5.0
1       Zane Valdez        1    4.0
2   Sherlock Holmes        4    2.0
3       Joseph Ryan        2    0.0
4  Christian Willis        1    0.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 18:12:29