如何从现有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
相关产品推荐
相关产品推荐

