大熊猫内的计算汇总

时间:2015-05-28 17:45:37

标签: python numpy pandas

我正在尝试在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

2 个答案:

答案 0 :(得分:1)

传递df.agg字典用于指定输出列的名称,在这里你基本上编写了一个聚合函数,它试图为一个命名列使用三个公式,并且该列已经在你的数据帧,所以它将失败。

你应该做的事情看起来应该更像:

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

您将计算功能重写为lambda或自定义函数,具体取决于您的操作方式。

答案 1 :(得分:0)

您需要定义作用于该组的函数,以便为您提供大于3200的值的百分比,并将其与另一个函数一起传递到.agg

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

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