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

如何匹配6个DataFrame的[Col A]对应[Col B]得分并生成新DataFrame

多参数国家得分表对齐合并方案

不要使用iloc按行位置匹配、或写多层循环条件判断实现需求:这类方案完全依赖各表的国家行顺序完全一致,只要某张表缺一个国家、或者排序不同,就会出现整列数据错位,且数据量稍大时运行效率极低。使用pandas自带的键匹配合并逻辑即可高效、准确完成需求,具体实现路径如下:

前置预处理

先对6个独立参数表做统一列名处理,避免合并时列名冲突,同时统一匹配键:

  • 所有表的Col A(国家名列)统一重命名为相同字段名,比如国家名称
  • 每个表的Col B(得分列)重命名为对应参数的专属名称,比如军事表改为军事得分、人口表改为人口得分,其余4个表按参数类型同理修改
    参考预处理代码:
# 逐表完成重命名,示例为军事、人口两个表的处理逻辑
df_military = df_military.rename(columns={"Col A": "国家名称", "Col B": "军事得分"})
df_population = df_population.rename(columns={"Col A": "国家名称", "Col B": "人口得分"})
# 经济、科技、外交、资源等其余4个表按相同规则重命名即可

核心合并操作

选择外连接(outer join) 逻辑做匹配,可以保留所有参数表中出现过的全部国家,某张表未收录的国家对应得分会自动填充为空值NaN,完全不会出现匹配错位问题,两种实现方式任选其一即可:

方法1:逐表merge(适合表量少的场景,6张表用这个逻辑直观易调试)

df_final = df_military.merge(
    df_population, on="国家名称", how="outer"
).merge(
    df_economy, on="国家名称", how="outer"
).merge(
    df_tech, on="国家名称", how="outer"
).merge(
    df_diplomacy, on="国家名称", how="outer"
).merge(
    df_resource, on="国家名称", how="outer"
)

方法2:concat按索引拼接(写法更简洁)

先将所有表的匹配键设为索引,再做横向拼接,pandas会自动按索引值(国家名)对齐数据:

# 将所有预处理完成的参数表存入列表
df_list = [df_military, df_population, df_economy, df_tech, df_diplomacy, df_resource]
# 统一设置国家名为索引后横向拼接,最后将国家名转回普通列
df_final = pd.concat(
    [df.set_index("国家名称") for df in df_list],
    axis=1,
    join="outer"
).reset_index()

结果校验

合并完成后可做两步简单校验,确保匹配准确:

  • 执行print(df_final["国家名称"].duplicated().sum()),返回值为0即说明没有重复匹配的国家条目;如果返回值大于0,需要检查原表是否存在同一国家多行录入的问题
  • 缺失值可按分析需求处理:如果需要将未收录的得分记为0,可执行df_final = df_final.fillna(0);如果需要保留缺失标记,直接保留NaN即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:45:48