如何让Pandas GroupBy补全缺失性别分组的计数为0?
补全分组中缺失类别的计数(含0值)
我来帮你搞定这个需求!你现在的问题是分组后只显示了数据中实际存在的value_text和gender组合,缺失的组合(比如Type 2对应F)没有被展示出来,想要把这些缺失项的计数补为0对吧?
这里有两种简单的实现方法,都能达到你想要的效果:
方法一:用reindex补全所有组合
先获取筛选后的数据集,然后生成所有可能的value_text和gender组合,最后用reindex把缺失的组合补全并填充0:
# 第一步:筛选目标数据 filtered_frame = frame[ frame['value_text'].str.match('Type 2') | frame['value_text'].str.match('Type II diabetes') ] # 第二步:生成所有需要的value_text和gender的笛卡尔积组合 all_groups = pd.MultiIndex.from_product( [filtered_frame['value_text'].unique(), filtered_frame['gender'].unique()], names=['value_text', 'gender'] ) # 第三步:计算原始分组计数,再补全缺失组合 count_result = filtered_frame.groupby(['value_text', 'gender'])['value_text'].count() final_result = count_result.reindex(all_groups, fill_value=0).reset_index(name='count')
方法二:用pivot_table自动补全
pivot_table默认会填充缺失的行列组合,之后再转成你需要的格式即可:
filtered_frame = frame[ frame['value_text'].str.match('Type 2') | frame['value_text'].str.match('Type II diabetes') ] final_result = filtered_frame.pivot_table( index='value_text', columns='gender', values='value_text', aggfunc='count', fill_value=0 # 直接填充缺失值为0 ).stack().reset_index(name='count')
这两种方法都能得到你期望的结果,会把所有value_text和gender的组合都列出来,不存在的组合计数自动设为0。
内容的提问来源于stack exchange,提问作者Bejita
相关产品推荐
相关产品推荐

