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

如何基于关联DataFrame计算城市与对应国家的数值差值?

解决方案

核心思路

先建立城市与国家的对应映射,再将df3的国家维度数据匹配到df1的城市维度列,最后执行逐单元格的减法操作,保证输出结构与df1完全一致。

代码实现

import pandas as pd

# 构造示例DataFrame
df1 = pd.DataFrame(
    data=[[1,81,26,55,95], [92,42,96,98,7], [14,4,60,88,73]],
    index=pd.date_range('2023-01-01', periods=3),
    columns=['NY', 'LA', 'Rome', 'London', 'Milan']
)

df2 = pd.DataFrame(
    data=[['NY','US'], ['LA','US'], ['London','UK'], ['Rome','Italy'], ['Milan','Italy']],
    columns=['City', 'Country']
)

df3 = pd.DataFrame(
    data=[[70,41,32], [98,46,45], [83,50,17]],
    index=pd.date_range('2023-01-01', periods=3),
    columns=['US', 'UK', 'Italy']
)

# 1. 生成城市-国家映射字典
city_country_map = df2.set_index('City')['Country'].to_dict()

# 2. 将df3转换为与df1列对齐的结构:每列对应城市所属国家的数值
matched_country_data = df3[city_country_map.values()].set_axis(city_country_map.keys(), axis=1)

# 3. 执行减法运算得到结果
result_df = df1 - matched_country_data

print(result_df)

输出结果

运行代码后将得到与df1结构完全一致的结果:

NY  LA  Rome  London  Milan
2023-01-01 -69  11    -6      14     63
2023-01-02  -6 -56    51      52    -38
2023-01-03 -69 -79    43      38     56

关键细节说明

  • city_country_map:把df2转换为字典格式,快速通过城市名找到对应国家。
  • matched_country_data:提取df3中对应国家的列,再将列名替换为城市名,确保和df1的列结构完全匹配,让减法操作能按行列一一对应执行。
  • 直接减法:利用pandas的广播特性,自动按日期索引和城市列对齐,完成逐单元格的数值计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:22:55