利用Python進行資料分析_資料聚合與分組運算_分組級運算和轉換
阿新 • • 發佈:2021-12-07
transform方法
transform會講一個函式運用到各個分組。
檔案6.xlsx的內容如下:
假設我們想為DataFrame新增一個用於存放各索引分組平均值的列。我們可以先聚合再合併:
from pandas import Series,DataFrame import pandas as pd df = pd.read_excel('F:/Jupyter/6.xlsx') sex_mean = df.groupby('sex').mean().add_prefix('mean_') sex_mean pd.merge(df,sex_mean,left_on='sex',right_index=True)
接下來,我們用transform方法解決這個問題:
from pandas import Series,DataFrame import pandas as pd import numpy as np df = pd.read_excel('F:/Jupyter/6.xlsx') key = ['sex'] sex_mean = df.groupby(key).transform(np.mean).add_prefix('mean_') sex_mean
執行結果:
這個方法的好處是,假設我們現在要將每個人的平均分再減10分。我們只需要寫一個函式 defminus()
from pandas import Series,DataFrame import pandasas pd import numpy as np df = pd.read_excel('F:/Jupyter/6.xlsx') # key = ['age'] def minus(arr): return arr-10 sex_mean = df.groupby('age').transform(minus).add_prefix('mean_') sex_mean
執行結果:
從結果中,我們可以看到列表中的每個數值均被減10。
applye方法
呼叫applye方法返回的是一個pandas物件或標量值。
題目:分別計算男生和女生每個科目的平均成績。
from pandas importSeries,DataFrame import pandas as pd import numpy as np df = pd.read_excel('F:/Jupyter/6.xlsx') def find(df): return df.mean() sex = df.groupby('sex').apply(find) sex
執行結果: