[英]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.