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

如何从现有DataFrame聚合生成指定结构的新DataFrame?

解决方案

假设你的原始DataFrame包含以下关键列:Source country continent(来源国所属大洲)、Destination country(目标国)、capital expenditure(资本支出),我们可以通过以下步骤生成目标结构的DataFrame:

步骤1:明确计算条件

根据你的需求,第一个条件是来源国为欧盟(EU),另外三个条件可根据实际业务补充(比如:来源国为非欧盟欧洲国家、来源国为非欧洲国家、全球所有来源国等),这里先给出通用示例条件:

  • 条件1:Source country continent == 'EU'
  • 条件2:Source country continent == 'Non-EU Europe'
  • 条件3:Source country continent == 'Non-Europe'
  • 条件4:无大洲限制(所有来源)

步骤2:代码实现

import pandas as pd

# 替换为你的真实DataFrame
df = pd.DataFrame({
    'Source country continent': ['EU', 'EU', 'Non-EU Europe', 'Non-Europe', 'EU'],
    'Destination country': ['Austria', 'Germany', 'Austria', 'Austria', 'Germany'],
    'capital expenditure': [100, 200, 150, 50, 300]
})

# 提取所有作为目标国的欧洲国家
european_destinations = df['Destination country'].unique()

# 初始化结果DataFrame
result_df = pd.DataFrame(index=european_destinations)

# 按条件计算各维度的资本支出总和
result_df['EU来源总支出'] = df[df['Source country continent'] == 'EU'].groupby('Destination country')['capital expenditure'].sum()
result_df['非欧盟欧洲来源总支出'] = df[df['Source country continent'] == 'Non-EU Europe'].groupby('Destination country')['capital expenditure'].sum()
result_df['非欧洲来源总支出'] = df[df['Source country continent'] == 'Non-Europe'].groupby('Destination country')['capital expenditure'].sum()
result_df['全部来源总支出'] = df.groupby('Destination country')['capital expenditure'].sum()

# 填充无数据的项为0,重置索引并调整列名
result_df = result_df.fillna(0).reset_index().rename(columns={'index': '目标国家'})

print(result_df)

代码说明

  • 通过条件筛选+groupby实现分维度求和,精准匹配每个目标国的对应来源支出;
  • 用fillna(0)处理无对应数据的场景(比如某国没有非欧洲来源的支出);
  • 最后重置索引、修改列名,得到和目标结构一致的DataFrame。

如果你的四个条件和示例不同,只需要修改筛选条件(df[xxx]部分)和对应的列名即可。

内容的提问来源于stack exchange,提问作者Carmen Moreno Martínez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:25:18