如何补全疫苗数据的所有分组条目并计算正确累积接种量?
补全疫苗接种数据的分组缺失条目并填充0
要补全每个district+月度visit_date下的所有age_group和sex组合,核心是生成所有可能的分组维度组合,再和现有数据做关联填充,具体步骤如下:
1. 定义所有维度的取值范围
先明确已知的固定维度取值,再从现有结果res1中提取动态维度的唯一值:
# 已知的固定维度取值 age_groups = ['18-34', '35-49', '50-59', '60+'] sexes = ['Male', 'Female', 'Unidentified'] # 从res1中提取其他维度的唯一值 districts = res1['district'].unique() provinces = res1['province'].unique() months = res1['visit_date'].unique()
2. 生成全量分组组合
利用pd.MultiIndex.from_product生成所有维度的笛卡尔积,确保每个可能的组合都被覆盖:
# 生成所有可能的分组组合 all_combinations = pd.MultiIndex.from_product( [districts, months, provinces, age_groups, sexes], names=['district', 'visit_date', 'province', 'age_group', 'sex'] ).to_frame(index=False)
3. 关联现有数据并填充缺失值
将全量组合与res1左连接,把缺失的月度接种人数填充为0:
# 左连接保留所有组合,缺失的接种量填充为0 full_data = pd.merge(all_combinations, res1, on=['district', 'visit_date', 'province', 'age_group', 'sex'], how='left') full_data['total_number_individuals_vaccinated'] = full_data['total_number_individuals_vaccinated'].fillna(0)
4. 重新计算累积接种量
按分组维度+时间排序后,重新计算累积值(此时所有组合都存在,累积计算不会中断):
# 按分组维度和时间排序 full_data = full_data.sort_values(['district', 'age_group', 'sex', 'visit_date']) # 计算累积接种量 full_data['cumulative_vaccinations'] = full_data.groupby(['district', 'age_group', 'sex'])['total_number_individuals_vaccinated'].cumsum()
处理完成后,每个district和月度visit_date下都会包含所有age_group与sex的组合,缺失条目的月度接种量为0,累积量会连续计算(缺失月份的累积量等于上一月的数值)。
内容的提问来源于stack exchange,提问作者Mazil_tov998
相关产品推荐
相关产品推荐

