我正在尝试汇总来自批生产过程中各种传感器的数据,以便使用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一起使用
答案 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']})
希望它会有所帮助:)