Python Pandas groupby:应用vs聚合缺少的类别

Python Pandas groupby:应用vs聚合缺少的类别,python,pandas,Python,Pandas,我遇到了一个问题,当分类数据缺少值时,panda的GroupBy.apply和GroupBy.aggregate会给出不同的结果聚合保留所有“已知”类别,但应用仅保留数据中存在的类别 下面是一个简化的示例: 将熊猫作为pd导入 将numpy作为np导入 #`missing`有'b'类,但没有数据使用它。 missing=pd.Category(列表('aaa'),类别=['a','b'])) 稠密=pd.分类(列表('abc')) 值=np.arange(len(稠密)) df=pd.DataF

我遇到了一个问题,当分类数据缺少值时,panda的
GroupBy.apply
GroupBy.aggregate
会给出不同的结果<代码>聚合保留所有“已知”类别,但
应用
仅保留数据中存在的类别

下面是一个简化的示例:

将熊猫作为pd导入
将numpy作为np导入
#`missing`有'b'类,但没有数据使用它。
missing=pd.Category(列表('aaa'),类别=['a','b']))
稠密=pd.分类(列表('abc'))
值=np.arange(len(稠密))
df=pd.DataFrame({'missing':missing'dense':dense'values':values})
grouped=df.groupby(['missing','dense']))
打印分组。平均值()
打印分组聚合(np.平均值)
打印分组。应用(lambda块:np.mean(块))
哪张照片

            values
missing dense
a       a           0
        b           1
        c           2
b       a         NaN
        b         NaN
        c         NaN
            values
missing dense
a       a           0
        b           1
        c           2
b       a         NaN
        b         NaN
        c         NaN
            values
missing dense
a       a           0
        b           1
        c           2    
请注意,最后一个数据帧缺少
NaN
行,其中
missing=b
。我理解为什么
apply
可能会这样做(它选择不将一组
NaN
s传递给缩减函数)。上面的代码片段只是一个玩具示例:我实际上需要使用
apply
来获得我想要的结果


问题:使用
应用
但创建与
聚合
返回的形状匹配的输出形状的最佳方法是什么?

这需要一个增强拉动请求来完成,请参阅


一般来说,您应该使用simply use
.mean()
作为惯用的方法来实现这一点(而且要快得多)。

是的,但我实际上对计算平均值不感兴趣。您的建议(在链接的github问题中)使用
grouped.\u reindex\u output
内部似乎给出了所需的输出。(我想在
GroupBy
对象之外使用有点不安全,但我要留下一个注释;)。谢谢