如何在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
相关产品推荐
相关产品推荐

