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

Pandas如何基于另一DataFrame的条件计算对应国家GDP均值

实现代码

你可以通过以下两种方式实现需求,第一种逻辑清晰易读,第二种为向量化实现,更适合大数据量场景:

方法1:遍历行计算(易理解)

import pandas as pd

# 构造df1和df2的代码你已经写好,这里直接复用即可
# 1. 将df1转为年份为索引、国家为列的宽表,存储对应年份各国GDP
gdp_wide = df1.pivot(index="year", columns="country", values="GDP")
country_list = ["France", "Germany", "US", "Canada"]

mean_gdp = []
for _, row in df2.iterrows():
    # 取当前年份的各国GDP,筛选出该组织当年的成员国GDP求平均
    current_year_gdp = gdp_wide.loc[row["year"]]
    member_gdp = current_year_gdp[row[country_list] == 1]
    mean_gdp.append(member_gdp.mean())

# 生成最终结果
df3 = df2.copy()
df3["mean_gdp"] = mean_gdp

方法2:向量化运算(效率更高)

import pandas as pd

gdp_wide = df1.pivot(index="year", columns="country", values="GDP")
country_list = ["France", "Germany", "US", "Canada"]

# 按年份对齐两个表的数据,计算成员国GDP总和后除以成员国数量得到平均值
merged = df2.merge(gdp_wide, on="year", suffixes=("_is_member", "_gdp"))
total_gdp = (merged[[c + "_is_member" for c in country_list]].values * merged[[c + "_gdp" for c in country_list]].values).sum(axis=1)
member_count = df2[country_list].sum(axis=1)

df3 = df2.assign(mean_gdp = total_gdp / member_count)

两种方法运行后得到的df3和你给出的预期输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:24:04