当某些列由“描述”聚合而其他列由各种其他聚合器聚合时,如何定义pandas.groupby聚合函数?

时间:2019-05-21 09:34:10

标签: python pandas pandas-groupby

我正在尝试汇总来自批生产过程中各种传感器的数据,以便使用pandas.groupby()。agg({})函数将其与最终产品匹配。

为方便起见,由于我们不确定如何最好地总结某些属性,因此我想对某些属性使用“描述”功能。其他属性需要几种汇总功能,例如['min','max']。

问题是,当在同一词典中提供时,熊猫似乎无法在同一分组操作中执行两项操作。

最小示例:

df = pd.DataFrame({'Sensor_1': [1, 2, 3, 4, 5, 6, 5, 4, 3, 3, 2], 
'Sensor_2': [2, 2, 3, 3, 7, 6, 9, 2, 2, 1, 1], 
'Batch': [1, 1, 1, 2, 1, 2, 1, 2, 2, 2, 2]})

我现在可以使用groupby运算符执行以下分组:

df.groupby('Batch').agg({'Sensor_1': 'mean',
                        'Sensor_2': 'describe'})

我也可以将实例分组,例如:

df.groupby('Batch').agg({'Sensor_1': ['mean', 'min'],
                        'Sensor_2': 'max'})

但是,定义如下:

df.groupby('Batch').agg({'Sensor_1': ['mean', 'min'],
                        'Sensor_2': 'describe'})

引发以下错误:

  

TypeError:无法连接类型为“ class'dict'”的对象;仅pd.Series,pd.DataFrame和pd.Panel(已弃用)objs有效

有人知道为什么会发生这种情况以及如何解决问题吗?

我正在将Jupyter Hub与Python 3.6.8和Pandas版本0.23.0一起使用

1 个答案:

答案 0 :(得分:0)

通过定义分位数功能,基本上可以实现describe方法的所有功能

def quant(n):
    def quantile_(x):
        return np.quantile(x, n)
    quantile_.__name__ = 'quantile_%s' % n
    return quantile_

然后:

df.groupby("Batch").agg({"Sensor_1": ['mean', 'min'], 
                         "Sensor_2": ['std', 'min', quant(.25), quant(.50), quant(.75), 'max']})

希望它会有所帮助:)