![](/img/trans.png)
[英]Create multiple columns with calculations using groupby, aggregate functions in Pandas
[英]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.