![](/img/trans.png)
[英]pandas apply User defined function to grouped dataframe on multiple columns
[英]how to apply a user defined function column wise on grouped data in pandas
如何將用戶定義的 function 列應用於 pandas 中的分組數據。 用戶定義的 function 返回一系列固定的形狀。
def getStats(col):
names = ['mean', 'std']
return pd.Series([np.mean(col), np.std(col)], index = names, name = col.name)
df = pd.DataFrame({'city':['c1','c2','c1','c2'],
'age':[10,20,30,40],
'sal':[1000,2000,3000,4000]})
grp_data = df.groupby('city')
grp_data.apply(getStats)
我已經嘗試過上面的片段。 但我沒有得到預期格式的結果。
c1 | 意思| x | 是的
c2 | 標准 | x1 | y1
你能幫忙嗎?
我認為這里沒有必要自定義level
,而是通過GroupBy.agg
聚合函數列表並通過DataFrame.stack
重塑,最后一個DataFrame.rename_axis
是city
名稱軸和標簽:rename。
df = df.groupby('city').agg([np.mean,np.std]).stack().rename_axis(['city','level'])
print (df)
age sal
city level
c1 mean 20.000000 2000.000000
std 14.142136 1414.213562
c2 mean 30.000000 3000.000000
std 14.142136 1414.213562
def q(c):
def f1(x):
return x.quantile(c)
f1.__name__ = f'q{c}'
return f1
df = (df.groupby('city')
.agg([np.mean,np.std, q(0.25), q(0.75)])
.stack()
.rename_axis(['city','level']))
print (df)
age sal
city level
c1 mean 20.000000 2000.000000
std 14.142136 1414.213562
q0.25 15.000000 1500.000000
q0.75 25.000000 2500.000000
c2 mean 30.000000 3000.000000
std 14.142136 1414.213562
q0.25 25.000000 2500.000000
q0.75 35.000000 3500.000000
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.