首页 > 解决方案 > 为什么 Pandas 在空 DataFrame 上执行 groupby 时会不一致地使用 MultiIndex?

问题描述

即使 DataFrame 有零行,我希望 agroupby仍然返回一个带有反映 groupby 列的 MultiIndex 的结果。但是,在某些情况下,这不会发生。例如,在以下代码中,索引没有名称,也不是 MultiIndex。

foo = pd.DataFrame({'col1':[None,None], 'col2':[None,None], 'col3':[None,None]})
display(foo.groupby(['col1', 'col2']).agg({'col3':'sum'}))

另一方面,如果我将任何列的类型更改为非对象类型,则将存在 MultiIndex(具有正确的级别名称)。此外,当按单列分组时,即使类型仍然都是 Object,我也会得到一个名称正确的索引。

这种行为是故意的吗?使用 MultiIndex 背后的理念是什么?

标签: pythonpandas

解决方案


尝试dropna = False

foo.groupby(['col1', 'col2'], dropna=False).agg({'col3':'sum'})

输出:

           col3
col1 col2      
NaN  NaN      0

推荐阅读