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

按地区和国家分组计算2016-2019年Yearly_rank的差值

问题需求

现有包含Region、Country、Year、Yearly_rank列的DataFrame,需按Region和Country分组,计算每个国家2016年至2019年之间Yearly_rank的变化值。

示例DataFrame代码

import pandas as pd

df = pd.DataFrame([
    {'Region': 'west europe', 'Country': 'Finland', 'Year': 2019, 'Yearly_rank': 1},
    {'Region': 'west europe', 'Country': 'Denmark', 'Year': 2019, 'Yearly_rank': 2},
    {'Region': 'west europe', 'Country': 'Norway', 'Year': 2019, 'Yearly_rank': 3},
    {'Region': 'west europe', 'Country': 'Iceland', 'Year': 2019, 'Yearly_rank': 4},
    {'Region': 'west europe','Country': 'Netherlands', 'Year': 2019, 'Yearly_rank': 5},
    {'Region': 'west europe', 'Country': 'Switzerland', 'Year': 2019, 'Yearly_rank': 6},
    {'Region': 'west europe', 'Country': 'Sweden','Year': 2019, 'Yearly_rank': 7},
    {'Region': 'australia and new zealand', 'Country': 'New Zealand', 'Year': 2019, 'Yearly_rank': 8},
    {'Region': 'north america', 'Country': 'Canada','Year': 2019, 'Yearly_rank': 9},
    {'Region': 'west europe', 'Country': 'Austria', 'Year': 2019,'Yearly_rank': 10}
])

注:示例仅包含2019年数据,测试计算逻辑需补充对应国家2016年的Yearly_rank记录。

解决方案

步骤1:筛选目标年份数据

先过滤出2016-2019年的记录,聚焦处理目标时间段的数据:

filtered_df = df[(df['Year'] >= 2016) & (df['Year'] <= 2019)]

步骤2:计算排名变化值

这里提供两种可靠的计算方式:

方式一:分组后直接提取年份值计算

通过分组后,获取每个国家2019年和2016年的排名并计算差值:

rank_change = filtered_df.groupby(['Region', 'Country']).apply(
    lambda x: x.loc[x['Year'] == 2019, 'Yearly_rank'].values[0] - x.loc[x['Year'] == 2016, 'Yearly_rank'].values[0]
).reset_index(name='Rank_Change_2016_2019')

注意:若某国家缺失2016或2019年数据,此方法会报错,适合数据完整的场景。

方式二:透视表计算(更稳健)

先将数据转为透视表,再计算差值,自动处理缺失数据(缺失时显示NaN):

# 生成透视表,行维度为Region+Country,列维度为Year,值为Yearly_rank
pivot_df = filtered_df.pivot_table(index=['Region', 'Country'], columns='Year', values='Yearly_rank')
# 计算2019-2016年的排名变化
pivot_df['Rank_Change_2016_2019'] = pivot_df[2019] - pivot_df[2016]
# 重置索引得到结构化结果
result_df = pivot_df.reset_index()

结果说明

  • Rank_Change_2016_2019为正值:表示该国家2019年排名比2016年下降(比如从第2名掉到第5名,差值为3)
  • Rank_Change_2016_2019为负值:表示该国家2019年排名比2016年上升(比如从第5名升到第2名,差值为-3)
  • 若出现NaN,说明对应国家缺失2016或2019年的排名数据,可根据需求用fillna()填充处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:15:26