如何在新冠疫情数据集中创建统计国家单日确诊破千后天数的新变量
实现步骤
- 第一步:按国家维度分组,筛选出所有单日确诊≥1000的记录,取每个国家对应的最小观测日期,即为该国的「首次破千基准日」
- 第二步:将每个国家对应的基准日,匹配回原数据集对应国家的所有行记录
- 第三步:用每行的观测日期减去对应国家的基准日,得到的天数差即为所需新变量。如果你不需要基准日之前的记录,可将差值为负的结果统一设为缺失值
代码实现
以下提供两种数据分析常用工具的实现代码:
Python(Pandas 版本)
假设你的数据集名为df,对应核心列名为country(国家名)、date(观测日期)、daily_cases(单日新增确诊数):
import pandas as pd # 先将日期列转为datetime格式 df['date'] = pd.to_datetime(df['date']) # 计算每个国家首次单日确诊破1000的日期 first_1000_date = df[df['daily_cases'] >= 1000].groupby('country')['date'].min().rename('first_1000_date') # 将基准日匹配回原数据集 df = df.merge(first_1000_date, on='country', how='left') # 计算距离基准日的天数 df['days_since_1000'] = (df['date'] - df['first_1000_date']).dt.days # 可选:将破千日之前的记录设为缺失值 df.loc[df['days_since_1000'] < 0, 'days_since_1000'] = pd.NA
R(dplyr 版本)
library(dplyr) library(lubridate) # 转换日期列格式 df <- df %>% mutate(date = ymd(date)) # 分组计算新变量 df <- df %>% group_by(country) %>% mutate( # 取首次破千的最小日期,na.rm=T忽略缺失的确诊记录 first_1000_date = min(date[daily_cases >= 1000], na.rm = TRUE), days_since_1000 = as.integer(date - first_1000_date) ) %>% ungroup()
注意:从未出现单日确诊破千的国家,计算得到的
days_since_1000会返回缺失值,你可以按需过滤这部分国家的记录即可。
内容的提问来源于stack exchange,提问作者kris
相关产品推荐
相关产品推荐

