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

如何按美国总统任期合并并汇总年度GDP数据集?

按总统任期汇总年度GDP的实现方案

需求说明

现有两个DataFrame:

  1. 年度GDP数据:
date  GDP
1933   1.2
...    ...
2015   3.2
  1. 美国总统任期数据(已将start/end转为datetime64类型):
start              end            president               party                              
1933-03-04  1941-01-20  Franklin D. Roosevelt   Democratic  
1945-04-12  1953-01-20  Harry S. Truman         Democratic  
1953-01-20  1961-01-20  Dwight D. Eisenhower    Republican  
... 
2017-01-20  2021-01-20  Donald Trump            Republican  

需要自动匹配每个总统任期对应的年度GDP并求和,无需手动计算。

实现方案

方法1:逐行应用计算(适合小数据集)

步骤1:预处理GDP数据

将GDP的date列转为datetime类型,对应年度的起始日期:

import pandas as pd

# 转换GDP的date列为datetime
gdp_df['date'] = pd.to_datetime(gdp_df['date'], format='%Y')

步骤2:定义求和函数并应用

通过apply遍历每个总统任期,筛选出与任期有重叠的年度GDP并求和:

def get_term_gdp(row):
    # 判断年度区间(date到date+1年)是否与总统任期有重叠
    mask = (gdp_df['date'] <= row['end']) & (gdp_df['date'] + pd.DateOffset(years=1) > row['start'])
    return gdp_df.loc[mask, 'GDP'].sum()

# 给总统任期DataFrame添加GDP总和列
presidents_df['GDP'] = presidents_df.apply(get_term_gdp, axis=1)

方法2:矢量化匹配(适合大数据集)

用交叉连接+筛选+分组求和的方式,效率更高:

# 交叉连接两个DataFrame
cross_df = pd.merge(gdp_df.assign(key=1), presidents_df.assign(key=1), on='key').drop('key', axis=1)
# 添加年度结束日期列
cross_df['year_end'] = cross_df['date'] + pd.DateOffset(years=1)
# 筛选出年度与任期重叠的记录
valid_records = cross_df[(cross_df['date'] <= cross_df['end']) & (cross_df['year_end'] > cross_df['start'])]
# 按任期分组求和
result_df = valid_records.groupby(['start', 'end', 'president', 'party'])['GDP'].sum().reset_index()

逻辑说明

  • 核心判断逻辑:只要某年度的时间范围(1月1日至12月31日)与总统任期有任何重叠,就将该年度GDP计入总和(符合多数统计场景)。
  • 若需仅统计完全被任期覆盖的年度,可将筛选条件改为:
    mask = (gdp_df['date'] >= row['start']) & (gdp_df['date'] + pd.DateOffset(years=1) <= row['end'])
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:23:13