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

如何根据起止日期提取年份范围生成新行以对齐DataFrame结构

领导人数据集结构对齐实现方案

核心思路

通过生成任期覆盖的所有年份列表,再对列表做行展开,即可将按「领导人任期」聚合的数据集转换为和第一个数据集一致的「国家-年度」粒度结构,全程保留原有的国家、领导人、任期时间等基础信息。

分步代码实现

1. 日期格式预处理

首先将第二个DataFrame的任期起止列转换为pandas可识别的datetime格式,方便提取年份:

import pandas as pd

# df2对应你提供的第二个按任期存储的DataFrame
df2['leader_start_date'] = pd.to_datetime(df2['leader_start_date'])
df2['leader_end_date'] = pd.to_datetime(df2['leader_end_date'])

2. 生成年度列表并展开

为每一行任期生成其覆盖的所有年份,再将年份列表展开为单独行:

# 为每条任期生成覆盖的所有年份列表
df2['year'] = df2.apply(
    lambda row: list(range(row['leader_start_date'].year, row['leader_end_date'].year + 1)),
    axis=1
)
# 展开年份列,每一年对应独立行,其他信息同步复用
df2_exploded = df2.explode('year', ignore_index=True)

3. 列名对齐第一个数据集

调整列名和列顺序,和第一个「国家-年度」粒度的DataFrame结构完全对齐:

df2_aligned = df2_exploded.rename(columns={
    'LeaderCountryISO': 'country_isocode',
    'LeaderCountryOrIGO': 'country_name',
    'LeaderFullName': 'leader'
})[['year', 'country_isocode', 'country_name', 'leader', 'leader_start_date', 'leader_end_date']]

处理完成的df2_aligned就和第一个DataFrame结构完全一致,可以直接用于后续比对。

后续拼写差异比对参考

完成结构对齐后,可通过关联查询快速定位姓名拼写不一致的条目:

# df1对应你提供的第一个「国家-年度」粒度的DataFrame
compare_result = pd.merge(
    df1,
    df2_aligned,
    on=['year', 'country_isocode', 'leader_start_date', 'leader_end_date'],
    how='outer',
    suffixes=('_source1', '_source2')
)
# 筛选出两个来源姓名拼写不匹配的记录
diff_records = compare_result[compare_result['leader_source1'] != compare_result['leader_source2']]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:48:01