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

基于Pandas重构JHU新冠康复数据列及解决apply运算过慢问题

问题根源

你遇到的运行过慢问题完全是实现逻辑导致的,和数据集本身大小无关:

  • 你使用apply逐行遍历整个表,每处理一行都要全表扫描匹配「14天前同国家的数据」,时间复杂度为O(n²),该数据集累计有十几万行,这种写法跑数效率极低,几十分钟跑不完是正常情况
  • 现有逻辑还有计算错误:你只按Country/Region过滤14天前的数据,但是同一国家下可能有多个省/州条目,匹配时会返回多条结果而非你需要的对应区域的单条确诊值

优化方案

直接用pandas自带的分组移位函数实现需求,全流程运行只需要几秒,正确实现你的计算逻辑的代码如下:

import pandas as pd
import wget

urls = [
        'https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv',
        'https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_deaths_global.csv'
        
]

[wget.download(url) for url in urls]
confirmed = pd.read_csv('time_series_covid19_confirmed_global.csv')
deaths = pd.read_csv('time_series_covid19_deaths_global.csv')

dates = confirmed.columns[4:]
confirmed_long_form = confirmed.melt(
    id_vars =['Province/State', 'Country/Region', 'Lat', 'Long'],
    value_vars=dates,
    var_name='Date',
    value_name='Confirmed'

)

deaths_long_form = deaths.melt(
    id_vars =['Province/State', 'Country/Region', 'Lat', 'Long'],
    value_vars=dates,
    var_name='Date',
    value_name='Deaths'

)

full_table = confirmed_long_form.merge(
  right=deaths_long_form, 
  how='left',
  on=['Province/State', 'Country/Region', 'Date', 'Lat', 'Long']
)

full_table['Date'] = pd.to_datetime(full_table['Date'])
# 先按区域+日期排序,保证移位顺序正确
full_table = full_table.sort_values(by=['Country/Region', 'Province/State', 'Date'], ascending=True)

# 按国家+省份分组,确诊列往前移14行,即为对应区域14天前的累计确诊,直接减当日死亡即可
full_table['Recovered'] = full_table.groupby(['Country/Region', 'Province/State'])['Confirmed'].shift(14) - full_table['Deaths']
# 前14天没有14天前的确诊数据,可以按需填充0或者保留NaN
full_table['Recovered'] = full_table['Recovered'].fillna(0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:24:02