繁体   English   中英

熊猫集合内的计算

[英]Calculations within pandas aggregate

我正在尝试在pandas聚合中执行计算。 我希望将计算包括在聚合中。 我正在尝试的代码如下。 我还在df中使用pandas软件包。

data = data.groupby(['type', 'name']).agg({'values': [np.min, np.max, 100 * sum([('values' > 3200)] / [np.size])]})

我尝试计算的公式如下:

100 * sum((values > 3200) / (np.size))

这是np是聚合大小的位置(聚合的数量限制为> 3200的数字)。 如何在聚合中执行这样的计算会很有帮助。

输入数据示例(实际数据集要大得多)。 重复值归因于聚合。

type, name, values
apple, blue, 2500
orange, green, 2800
peach, black, 3300
lemon, white, 3500

所需的示例输出(由于我尚未能够执行计算,因此数字不正确):

type, name, values, np.min, np.max, calcuation
apple, blue, 2500, 1200, 40000, 2300
orange, green, 2800, 1200, 5000, 2500

通过df.agg字典来指定输出列的名称,在这里您实质上是在编写一个聚合函数,该函数试图对一个命名列使用三个公式,并且该列已经在您的数据框中,因此它将失败。

您应该做的事情应该更像是:

data = data.groupby(['type', 'name']).agg({'min':np.min, 'max':np.max, 'calculation': calculation})

根据要执行的操作,将计算函数重写为lambda或自定义函数的位置。

您需要定义作用在组上的函数,以为您提供大于3200的值的百分比,并将其与其他函数一起传递至.agg

func = lambda series: 100* (series > 3200).mean(); 
data.groupby(['type', 'name']).values.agg({'min': min, 'max': max, 'calculation': func})

布尔向量的平均值给出True值的百分比,这是一种更好的计算方式。 另外,您可以将常见的函数名称(例如min和max)作为字符串传递。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM