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

如何用Pandas按建国年份统计每年新增国家数量?

解决方法:统计每年新增的国家数量

首先咱们得抓住核心需求:你的数据集里每个国家对应多条年份记录,但我们只需要每个国家唯一的建国年份,再统计每个年份有多少新国家建立,最终把数据对应到图表需要的X轴year上。

步骤1:提取每个国家的唯一建国年份

因为同一个国家在数据里有很多行(每年一条),第一步要先去重,只保留每个国家和它对应的建国年份:

# 获取每个国家的唯一建国年份记录
unique_countries = df.drop_duplicates(subset=['country'])[['country', 'founding_year']]

这一步会得到一个无重复国家的数据集,每行对应一个国家和它的建国年份。

步骤2:统计每个建国年份的新增国家数

接下来对去重后的数据集,按founding_year分组,统计每个年份有多少新国家建立:

# 统计每个建国年份的新增国家数量
new_countries_per_year = unique_countries.groupby('founding_year').size().reset_index(name='new_country_count')

这里的size()会返回每个founding_year对应的国家数量,也就是当年新增的国家数。

步骤3:匹配到完整的year序列(可选但推荐)

你的X轴需要用数据集里的year变量,而有些年份可能没有新国家建立,为了让图表X轴连续,我们可以创建包含所有年份的序列,把新增国家数匹配进去,无新增的年份填0:

import pandas as pd

# 创建包含所有年份的DataFrame
all_years = pd.DataFrame({'year': range(df['year'].min(), df['year'].max() + 1)})

# 合并数据,填充无新增的年份为0
final_chart_data = all_years.merge(
    new_countries_per_year,
    left_on='year',
    right_on='founding_year',
    how='left'
).fillna(0).drop('founding_year', axis=1)

步骤4:生成累计国家数(可选)

如果你的图表需要展示到某一年为止的累计国家总数,可以添加一列累计值:

final_chart_data['cumulative_count'] = final_chart_data['new_country_count'].cumsum()

为什么你之前的方法不对?

  • 用df.groupby(['founding_year', 'country']).size():因为每个国家在数据里有多个year记录,这个分组统计的是每个国家在数据集中的行数,而非每个建国年份的国家数量。
  • 加入year到groupby后:每个(year, founding_year, country)组合都是唯一的,会返回大量分散的行,完全不是你需要的统计结果。

现在你可以用final_chart_data绘制图表了,X轴用year,Y轴可选new_country_count(每年新增)或者cumulative_count(累计总数)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:03:33