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

如何在Python/Pandas中创建计算列?以新增新冠病例为例

用Pandas计算每日新增COVID-19病例数

核心实现思路

累计病例的每日新增,本质是当前日期的累计值减去前一天的累计值。Pandas提供了shift()或diff()函数,可以高效完成这个计算,步骤如下:


基础单县数据处理

假设你已经将数据加载为Pandas DataFrame,且包含date(日期列)和cases(累计病例列):

import pandas as pd

# 加载数据(示例从CSV读取,根据你的数据源调整)
df = pd.read_csv('covid_county_data.csv')

# 关键步骤:将日期列转为datetime类型,并按日期升序排序
df['date'] = pd.to_datetime(df['date'])
df = df.sort_values('date').reset_index(drop=True)

# 计算每日新增:当前行cases - 上一行cases
df['new_case'] = df['cases'] - df['cases'].shift(1)

# 处理首行NaN值(首天无前置数据,可设为0或保留原累计值)
df['new_case'] = df['new_case'].fillna(0)

简化写法(用diff()函数)

diff()函数直接实现了"当前值减前一个值"的逻辑,代码更简洁:

df['new_case'] = df['cases'].diff().fillna(0)

多县数据场景扩展

如果你的数据集包含多个县的病例数据,只需通过groupby按县分组后计算即可:

# 按县分组,每组单独计算新增病例
df['new_case'] = df.groupby('county')['cases'].diff().fillna(0)

注意事项

  • 必须排序:数据必须按日期升序排列,否则计算出的新增值会完全错误
  • 缺失日期处理:如果数据存在日期断层(比如某天无记录),需要先补全日期再计算,避免出现跨多天的差值:
    # 补全日期示例(按县分组后,每天保留一条记录)
    df = df.set_index('date')
    df = df.groupby('county').resample('D').ffill().reset_index()
    # 再计算新增
    df['new_case'] = df.groupby('county')['cases'].diff().fillna(0)
    
  • 异常值处理:如果累计病例出现下降(比如数据修正),会得到负的新增值,可根据需求过滤或标记:
    # 将负的新增值设为0(或根据需求处理)
    df['new_case'] = df['new_case'].clip(lower=0)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 19:02:49