900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > pandas算加权平均值_pandas和groupby:如何计算agg中的加权平均值

pandas算加权平均值_pandas和groupby:如何计算agg中的加权平均值

时间:2023-08-29 01:38:33

相关推荐

pandas算加权平均值_pandas和groupby:如何计算agg中的加权平均值

有可能,但真的很复杂:

np.random.seed(234)

df= pd.DataFrame(np.random.randint(5,8,(1000,4)), columns=['a','b','c','d'])

wm = lambda x: (x * df.loc[x.index, "c"]).sum() / x.sum()

wm.__name__ = 'wa'

f = lambda x: x.sum() / df['b'] .sum()

f.__name__ = '%'

g = df.groupby('a').agg(

{'b':['sum', f, 'mean', wm],

'c':['sum','mean'],

'd':['sum']})

g.columns = g.columns.map('_'.join)

print (g)

d_sum c_sum c_mean b_sum b_% b_mean b_wa

a

5 2104 2062 5.976812 2067 0.344672 5.991304 5.969521

6 1859 1857 5.951923 1875 0.312656 6.009615 5.954667

7 2058 2084 6.075802 2055 0.342671 5.991254 6.085645

适用的解决方案:

def func(x):

# print (x)

b1 = x['b'].sum()

b2 = x['b'].sum() / df['b'].sum()

b3 = (x['b'] * x['c']).sum() / x['b'].sum()

b4 = x['b'].mean()

c1 = x['c'].sum()

c2 = x['c'].mean()

d1 = x['d'].sum()

cols = ['b sum','b %','wa', 'b mean', 'c sum', 'c mean', 'd sum']

return pd.Series([b1,b2,b3,b4,c1,c2,d1], index=cols)

g = df.groupby('a').apply(func)

print (g)

b sum b % wa b mean c sum c mean d sum

a

5 2067.0 0.344672 5.969521 5.991304 2062.0 5.976812 2104.0

6 1875.0 0.312656 5.954667 6.009615 1857.0 5.951923 1859.0

7 2055.0 0.342671 6.085645 5.991254 2084.0 6.075802 2058.0

g.loc['total']=g.sum()

print (g)

b sum b % wa b mean c sum c mean d sum

a

5 2067.0 0.344672 5.969521 5.991304 2062.0 5.976812 2104.0

6 1875.0 0.312656 5.954667 6.009615 1857.0 5.951923 1859.0

7 2055.0 0.342671 6.085645 5.991254 2084.0 6.075802 2058.0

total 5997.0 1.000000 18.009832 17.992173 6003.0 18.004536 6021.0

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。