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

使用Pandas合并多份经济数据框时出现重复行问题

问题分析与解决方案

重复行原因

你用自定义函数合并通胀率时出现重复行,核心问题是第二次合并时遍历的是已经包含多指标行的merged_df的Country列——比如阿根廷在merged_df里已有GDP、失业率两行,遍历会触发两次函数调用,每次都把原有的阿根廷数据和通胀率数据拼接,最终导致原有行重复。

另外,你当前的自定义函数逻辑本身效率不高:遍历每个国家时反复切片DataFrame,不仅耗时,还容易因重复遍历导致数据冗余。

最优解决方案:直接拼接所有指标DataFrame

所有指标文件的结构完全一致(仅Economic factor列值不同),直接用pd.concat一次性合并所有指标数据,既简洁又能避免重复,同时自动保留所有国家(包括只有部分指标的国家,比如阿尔巴尼亚)。

代码示例

import pandas as pd

# 读取所有指标文件
gdp = pd.read_excel("gdp_data.xlsx")
unemployment_rates = pd.read_excel("unemployment_data.xlsx")
inflation_rates = pd.read_excel("inflation_data.xlsx")

# 一次性合并所有DataFrame
merged_df = pd.concat([gdp, unemployment_rates, inflation_rates], ignore_index=True)

# 按国家和指标排序(可选,让数据更规整)
merged_df.sort_values(by=["Country", "Economic factor"], inplace=True)

# 去重(如果原始文件存在重复行的话)
merged_df.drop_duplicates(inplace=True)

自定义函数的修正方案(可选)

如果非要沿用自定义函数的思路,第二次合并通胀率时,必须遍历唯一的国家列表,而非已合并DataFrame中重复的Country值。修改后的代码示例:

# 假设已得到合并GDP和失业率的merged_df
inflation_rates = pd.read_excel("inflation_data.xlsx")

# 获取唯一国家列表,避免重复遍历
unique_countries = merged_df["Country"].unique()

def add_inflation_rate(country):
    if country in inflation_rates["Country"].values:
        country_inflation = inflation_rates[inflation_rates["Country"] == country]
        # 先获取该国家已有的数据,再拼接通胀率
        country_data = pd.concat([merged_df[merged_df["Country"] == country], country_inflation], ignore_index=True)
        return country_data
    else:
        return merged_df[merged_df["Country"] == country]

# 合并通胀率
final_df = pd.concat([add_inflation_rate(country) for country in unique_countries], ignore_index=True)
final_df.sort_values(by=["Country", "Economic factor"], inplace=True)

但显然,直接用pd.concat的方式更高效、更易维护。

内容的提问来源于stack exchange,提问作者Q.Ask

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 18:03:22