Pandas groupby:使用缺少的类别来应用vs agggregate

时间:2015-05-14 18:55:26

标签: python pandas

我遇到了一个问题,当分类数据缺失值时,熊猫的GroupBy.applyGroupBy.aggregate会给出不同形状的结果。 aggregate保留所有“已知”类别,但apply仅保留数据中存在的类别。

这是一个简化的例子:

import pandas as pd
import numpy as np


# `missing` has 'b' category but no data uses it.
missing = pd.Categorical(list('aaa'), categories=['a', 'b'])
dense = pd.Categorical(list('abc'))
values = np.arange(len(dense))
df = pd.DataFrame({'missing': missing, 'dense': dense, 'values': values})

grouped = df.groupby(['missing', 'dense'])
print grouped.mean()
print grouped.agg(np.mean)
print grouped.apply(lambda chunk: np.mean(chunk))

打印

            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    

请注意,最后一个数据框缺少NaNmissing = b。我理解为什么apply可能会这样做(它选择不将一组充满NaN的组传递给减少函数)。上面的代码段只是一个玩具示例:我实际上需要使用apply来获得我想要的结果。

问题:使用apply的最佳方式是什么,但创建的输出形状与aggregate返回的输出形状相匹配?

1 个答案:

答案 0 :(得分:3)

这需要增强拉取请求才能执行此操作,请参阅here

一般情况下,您应该使用.mean()作为惯用的方式来执行此操作(并且速度更快)。