假設資料結構如下:
![Python 如何做excel的樞紐分析? pandas.DataFrame.groupby() ; .agg( {column name: function name} ) ; 如何讀取多層index的xlsx檔案? df = pandas.read_excel (fpath, index_col =[0,1]) ; 如何顯示所有欄? pd.set_option ( "display.max_columns", None) - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2023/03/20230321112322_2-1200x523.png)
具有雙層index
如何讀取?
df = pd.read_excel(fpath, index_col =[0,1])
pd.set_option ( “display.max_columns“, None)
則可以顯示所有列
讀進來的DataFrame:
![Python 如何做excel的樞紐分析? pandas.DataFrame.groupby() ; .agg( {column name: function name} ) ; 如何讀取多層index的xlsx檔案? df = pandas.read_excel (fpath, index_col =[0,1]) ; 如何顯示所有欄? pd.set_option ( "display.max_columns", None) - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2023/03/20230321113121_64.png)
groupbyIdxObj = df.groupby( [“Range Index(距離索引)”] )
#<pandas.core.groupby.generic.DataFrameGroupBy object at 0x0000019D6F0A7250>
#groupbyIdxObj為一個 DataFrameGroupBy object
#groupby()裡面放的是list
groupbyIdxObj.size():
#算出相同Range Index重複了幾次
![Python 如何做excel的樞紐分析? pandas.DataFrame.groupby() ; .agg( {column name: function name} ) ; 如何讀取多層index的xlsx檔案? df = pandas.read_excel (fpath, index_col =[0,1]) ; 如何顯示所有欄? pd.set_option ( "display.max_columns", None) - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2023/03/20230321114209_90.png)
groupbyIdxObj.agg({“Peak Value(DB)” : “mean”})
![Python 如何做excel的樞紐分析? pandas.DataFrame.groupby() ; .agg( {column name: function name} ) ; 如何讀取多層index的xlsx檔案? df = pandas.read_excel (fpath, index_col =[0,1]) ; 如何顯示所有欄? pd.set_option ( "display.max_columns", None) - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2023/03/20230321114708_75.png)
groupbyIdxObj.agg({“Peak Value(DB)”:”mean”})
這行程式碼對 groupbyIdxObj 進行了分組操作,
其中使用了一個字典作為參數傳遞給 agg 方法。
字典的鍵是column name,
表示對該column進行聚合操作。
這裡只有一個鍵 “Peak Value(DB)”,
表示對該column進行平均值聚合。
#groupbyIdxObj.agg({“Peak Value(DB)”:[“mean”,”sum”]})
#是可用語法
值是一個字符串,表示使用哪個聚合函數。
這裡使用的是 mean 函數,表示求該列的平均值。
綜合起來,這行程式碼的作用是
對 groupbyIdxObj 進行分組,
並計算每組 “Peak Value(DB)” 的平均值,
返回一個新的 DataFrame 對象。
groupbyIdxObj.agg({“Peak Value(DB)”: [“mean”,”sum”] }):
![Python 如何做excel的樞紐分析? pandas.DataFrame.groupby() ; .agg( {column name: function name} ) ; 如何讀取多層index的xlsx檔案? df = pandas.read_excel (fpath, index_col =[0,1]) ; 如何顯示所有欄? pd.set_option ( "display.max_columns", None) - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2023/03/20230321180646_100.png)
groupbyIdxObj.agg( {“Peak Value(DB)”: [“mean”, “sum”, list ] }) :
![Python 如何做excel的樞紐分析? pandas.DataFrame.groupby() ; .agg( {column name: function name} ) ; 如何讀取多層index的xlsx檔案? df = pandas.read_excel (fpath, index_col =[0,1]) ; 如何顯示所有欄? pd.set_option ( "display.max_columns", None) - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2023/03/20230324164216_99.png)
![Python 如何做excel的樞紐分析? pandas.DataFrame.groupby() ; .agg( {column name: function name} ) ; 如何讀取多層index的xlsx檔案? df = pandas.read_excel (fpath, index_col =[0,1]) ; 如何顯示所有欄? pd.set_option ( "display.max_columns", None) - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2023/03/20230324164645_27.png)
groupbyIdxObj.agg( { “Peak Value(DB)” : “mean” } )
.agg() 裡面放dict
dict的value可以為str,也可以為list
若value為list,
返回的DataFrame會有雙層column name
![Python 如何做excel的樞紐分析? pandas.DataFrame.groupby() ; .agg( {column name: function name} ) ; 如何讀取多層index的xlsx檔案? df = pandas.read_excel (fpath, index_col =[0,1]) ; 如何顯示所有欄? pd.set_option ( "display.max_columns", None) - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2023/03/20230321181101_24.png)
![Python 如何做excel的樞紐分析? pandas.DataFrame.groupby() ; .agg( {column name: function name} ) ; 如何讀取多層index的xlsx檔案? df = pandas.read_excel (fpath, index_col =[0,1]) ; 如何顯示所有欄? pd.set_option ( "display.max_columns", None) - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2023/03/20230321181624_65.png)
count = groupbyIdxObj.size()
count為Series
轉為DataFrame的話,
只有單層column name
若與雙層column name 的DF做concat()
會變成單層column name的DF
count = groupbyIdxObj.size()
count.name=”Range Index重複次數”
#將groupbyIdxObj.size() 賦值給count這個Series
#並將Series更名
![Python 如何做excel的樞紐分析? pandas.DataFrame.groupby() ; .agg( {column name: function name} ) ; 如何讀取多層index的xlsx檔案? df = pandas.read_excel (fpath, index_col =[0,1]) ; 如何顯示所有欄? pd.set_option ( "display.max_columns", None) - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2023/03/20230321130753_31.png)
peakValueDBmean = groupbyIdxObj.agg({“Peak Value(DB)” : “mean”})
peakValueDBmean.columns=[“Peak Value(DB) mean group by Range Index”]
“””將groupbyIdxObj.agg({“Peak Value(DB)”:”mean”})
賦值給peakValueDBmean 這個DataFrame
DataFrame使用.columns更新欄標籤
“””
![Python 如何做excel的樞紐分析? pandas.DataFrame.groupby() ; .agg( {column name: function name} ) ; 如何讀取多層index的xlsx檔案? df = pandas.read_excel (fpath, index_col =[0,1]) ; 如何顯示所有欄? pd.set_option ( "display.max_columns", None) - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2023/03/20230321131331_37.png)
countIdx_DBmean = pd.concat([count,peakValueDBmean], axis=1 )
“”” #將count , peakValueDBmean
concat()起來
別忘記 axis=1
如果結尾再多 .reset_index()
可以將Range Index推出來當資料column “””
![Python 如何做excel的樞紐分析? pandas.DataFrame.groupby() ; .agg( {column name: function name} ) ; 如何讀取多層index的xlsx檔案? df = pandas.read_excel (fpath, index_col =[0,1]) ; 如何顯示所有欄? pd.set_option ( "display.max_columns", None) - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2023/03/20230321131652_91.png)
跟Excel樞紐分析比較:
![Python 如何做excel的樞紐分析? pandas.DataFrame.groupby() ; .agg( {column name: function name} ) ; 如何讀取多層index的xlsx檔案? df = pandas.read_excel (fpath, index_col =[0,1]) ; 如何顯示所有欄? pd.set_option ( "display.max_columns", None) - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2023/03/20230321132018_5.png)
Libre Office樞紐分析表的設定:
![Python 如何做excel的樞紐分析? pandas.DataFrame.groupby() ; .agg( {column name: function name} ) ; 如何讀取多層index的xlsx檔案? df = pandas.read_excel (fpath, index_col =[0,1]) ; 如何顯示所有欄? pd.set_option ( "display.max_columns", None) - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2023/03/20230321132131_1.png)
推薦hahow線上學習python: https://igrape.net/30afN
![Python 如何做excel的樞紐分析? pandas.DataFrame.groupby() ; .agg( {column name: function name} ) ; 如何讀取多層index的xlsx檔案? df = pandas.read_excel (fpath, index_col =[0,1]) ; 如何顯示所有欄? pd.set_option ( "display.max_columns", None) - 儲蓄保險王](https://savingking.com.tw/wp-content/uploads/2023/03/20230322080209_41.png)










近期留言