Pandas透视表选择含空值列作索引时分组结果丢失问题咨询
现象原因
这个问题是两点原因共同导致的:
pd.pivot_table的默认参数dropna=True,作用是自动剔除所有包含空值的分组键组合。你第一次调用时把存在空值的Sources列加入了索引分组,所有Sources为空的行对应的分组组合会被默认过滤,所以Living room类别的分组直接消失。- 你尝试修复时的参数添加位置有误:你是把
Sources从索引中移除后才加的dropna=False,此时参与分组的键里已经没有带空值的字段,该参数自然无法解决「带Sources作为索引时空值分组被删除」的问题。
正确修复方案
把Sources放回索引,同时添加dropna=False参数即可:
df_pivot = pd.pivot_table(df, index =['Country', 'Parent', 'Category', 'Distribution', 'Sources'], columns ='Period', values =['Sales 19', 'Sales 20', 'Sales 21'], dropna=False)
如果你使用的pandas版本低于1.3.0,存在旧版本中dropna=False对多索引分组不生效的已知bug,可以提前把Sources列的空值填充为占位符后再做透视,示例如下:
# 空值填充为自定义占位符,比如'无来源' df['Sources'] = df['Sources'].fillna('无来源') # 正常生成透视表即可保留原空值对应的分组 df_pivot = pd.pivot_table(df, index =['Country', 'Parent', 'Category', 'Distribution', 'Sources'], columns ='Period', values =['Sales 19', 'Sales 20', 'Sales 21'])
内容的提问来源于stack exchange,提问作者Chayb
相关产品推荐
相关产品推荐

