如何计算显示groupby中占总数百分比的列?
一种方法是在gorupby之后手动计算它,如本示例的最后一行所示:
import numpy as np
import pandas as pd
df= pd.DataFrame(np.random.randint(5,8,(10,4)), columns=['a','b','c','d'])
g = df.groupby('a').agg({'b':['sum','mean'], 'c':['sum'], 'd':['sum']})
g.columns = g.columns.map('_'.join)
g['b %']=g['b_sum']/g['b_sum'].sum()
但是,在我的真实数据中,我还有更多列,并且我需要在总和后加上%,因此,使用这种方法,我必须手动更改列的顺序。
是否有更直接的方法可以使%在总和后紧跟列?请注意,我需要agg()或类似的东西,因为在所有groupby中,我将不同的聚合函数应用于不同的列(例如x的和和avg,但仅y的最小值,等等)。
谢谢!
我认为您需要lambda function
输入agg
,然后将replace
列名称输入%
:
np.random.seed(78)
df= pd.DataFrame(np.random.randint(5,8,(10,4)), columns=['a','b','c','d'])
g =(df.groupby('a')
.agg({'b':['sum',lambda x: x.sum()/ df['b'].sum(),'mean'],
'c':['sum'],
'd':['sum']}))
g.columns = g.columns.map('_'.join).str.replace('<lambda>','%')
print (g)
d_sum c_sum b_sum b_% b_mean
a
5 25 24 24 0.387097 6
6 11 11 14 0.225806 7
7 22 23 24 0.387097 6
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句