假設資料結構如下:
具有雙層index
如何讀取?
df = pd.read_excel(fpath, index_col =[0,1])
pd.set_option ( “display.max_columns“, None)
則可以顯示所有列
讀進來的DataFrame:
groupbyIdxObj = df.groupby( [“Range Index(距離索引)”] )
#<pandas.core.groupby.generic.DataFrameGroupBy object at 0x0000019D6F0A7250>
#groupbyIdxObj為一個 DataFrameGroupBy object
#groupby()裡面放的是list
groupbyIdxObj.size():
#算出相同Range Index重複了幾次
groupbyIdxObj.agg({“Peak Value(DB)” : “mean”})
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”] }):
groupbyIdxObj.agg( {“Peak Value(DB)”: [“mean”, “sum”, list ] }) :
groupbyIdxObj.agg( { “Peak Value(DB)” : “mean” } )
.agg() 裡面放dict
dict的value可以為str,也可以為list
若value為list,
返回的DataFrame會有雙層column name
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更名
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更新欄標籤
“””
countIdx_DBmean = pd.concat([count,peakValueDBmean], axis=1 )
“”” #將count , peakValueDBmean
concat()起來
別忘記 axis=1
如果結尾再多 .reset_index()
可以將Range Index推出來當資料column “””
跟Excel樞紐分析比較:
Libre Office樞紐分析表的設定:
推薦hahow線上學習python: https://igrape.net/30afN