簡體   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