iT邦幫忙

2022 iThome 鐵人賽

DAY 10
1
AI & Data

先別急著學 Python | The Secret to Success in Python系列 第 10

Ɖ10-榫卯/ 利用分組 Python 方式計算加權平均數

  • 分享至 

  • xImage
  •  

更多的 Pandas

Pandas包含多個內置函數,如sum、mean、max、min等,我們可以應用到 DataFrame 或分組數據中。他可以提高你在數據處理和分析方面的效率。而在這邊加權平均數是一個很好的使用例子,因為它是一個容易理解但有用的公式。我發現,在查看某些數據集合時,它比簡單的平均數更直觀。在pandas中建立一個加權平均函數是比較簡單的,但是當與其他 pandas 函數(groupby) 結合起來時,會起到不可思議的作用。本文將討論為什麼你會選擇使用加權平均數來觀察你的數據的基本原理,然後介紹如何在pandas中構建和使用這個函數。本文所展示的基本原則將有助於在pandas中建立更複雜的分析,也應該有助於理解如何在pandas中處理分組數據。

用加權平均法 Weighted Average 對數據分組

加權平均數是一個常見的操作方式,在 Excel 中實現這項功能也非常容易,在上一章節我們說明了簡單數據分類,然而在本章中我將要更近一步的使用數據分組的功能,利用 Groupby 完成分組,以及多重聚合,達成數據分組來進行加權平均法,開始前我們要延續上一篇我們所自訂的 wavg 函數,這項函數將統計方法能夠使我們達成分組加權更加容易 。

def wavg(group, avg_name, weight_name):
    d = group[avg_name]
    w = group[weight_name]
    try:
        return (d * w).sum() / w.sum()
    except ZeroDivisionError:
        return d.mean()

分組方式 Groupby

通常 groupby常用於總結數據。例如,如果我們想看一下經理的Current_Price的平均值,用groupby就很簡單,我們可以 .apply() 的方式快速應用函數 wavg,我們可以快速選定後面要利用什麼(Current_Price 搭配 Quantity)或是(New_Product_Price 搭配 Quantity)。

sales.groupby("Manager").apply(wavg, "Current_Price", "Quantity")
sales.groupby("Manager").apply(wavg, "New_Product_Price", "Quantity")

https://ithelp.ithome.com.tw/upload/images/20220924/201407408TomXuFVVS.png

或者是直接分類 Manager 和 State,並且同樣應用上這個函數,他根據了不同的 Manager 名稱並且做 State 分類,來更細項的計算 New_Product_Price 與 Quantity 之間的加權關係。

sales.groupby(["Manager", "State"]).apply(wavg, "New_Product_Price", "Quantity")

https://ithelp.ithome.com.tw/upload/images/20220924/20140740vfWNBwA8jV.png

多重聚合 multiple aggregation

我想介紹的最後一個項目是對數據進行多重聚合(multiple aggregation)能力。例如說如果我們想得到一些列的平均值,一個列的中位數和另一個列的總和,我們可以通過定義一個帶有列名和要調用的聚合函數的字典來實現。然後,我們在分組的數據上調用 agg() 函數。

這項方式讓我們在做 Groupby 分組時可以同時完成聚合統計目標,我們使用 groupby("Manager") 完成主管名稱分類,並且按照需求利用 New_Product_Price 求得平均數 mean, 而 Current_Price 則求得中位數 median, 最後則在 Quantity 同時設定了 ['sum', 'mean']。

f = {'New_Product_Price': ['mean'],
     'Current_Price': ['median'], 
     'Quantity': ['sum', 'mean']}
sales.groupby("Manager").agg(f)

https://ithelp.ithome.com.tw/upload/images/20220924/20140740JRG79HRdZd.png

謝謝大家的觀看,但歷史的痕跡會持續下去

今年沒組團,每一筆一字矢志不渝的獻身精神都是為歷史書寫下新頁,有空的話可以走走逛逛我們去年寫的文章。


Hi'Jerry均

Jerry 據說是個僅佔人口的 4% 人口的 INFP 理想主義者,總是從最壞的生活中尋找最好的一面,想方設法讓世界更好,內心的火焰和熱情可以光芒四射,畢業後把人生暫停了半年,緩下腳步的同時找了份跨領域工作。偶而散步、愛跟小動物玩耍。曾立過很多志,最近是希望當一個有夢想的人。

謝謝你的時間「訂閱,追蹤和留言」都是陪伴我走過 30 天鐵人賽的精神糧食。


上一篇
Ɖ9-榫卯/ 利用多種 Python 方式簡單計算加權平均數
下一篇
Ɖ11-榫卯/ 一些在 Python 簡單的,在 Excel 會很複雜的事情
系列文
先別急著學 Python | The Secret to Success in Python30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言