gpt4 book ai didi

python - 加权平均 Pandas

转载 作者:太空宇宙 更新时间:2023-11-04 07:31:16 28 4
gpt4 key购买 nike

我有一个包含林分编号、树种、高度和体积的数据框:

import pandas as pd

df=pd.DataFrame.from_items([('STAND_ID',[1,1,2,3,3,3]),('Species',['Conifer','Broadleaves','Conifer','Broadleaves','Conifer','Conifer']),
('Height',[20,19,13,24,25,18]),('Volume',[200,100,300,50,100,10])])

STAND_ID Species Height Volume
0 1 Conifer 20 200
1 1 Broadleaves 19 100
2 2 Conifer 13 300
3 3 Broadleaves 24 50
4 3 Conifer 25 100
5 3 Conifer 18 10

我想按展台 ID 进行分组和拆分并计算体积加权平均高度,所以我尝试:

newdf=df.groupby(['STAND_ID','Species']).mean().unstack()

Height Volume
Species Broadleaves Conifer Broadleaves Conifer
STAND_ID
1 19.0 20.0 100.0 200.0
2 NaN 13.0 NaN 300.0
3 24.0 21.5 50.0 55.0

高度当然不是体积加权平均值。我怎样才能对它们进行体积加权?对于 STAND_ID 3 和 Conifer,就像这样:

(25*100 + 18*10)/(100+10)=24.4

最佳答案

如果 lambda 函数令人困惑,apply 也可以与函数定义一起使用。 (而且还有一个函数numpy.average来计算加权平均值)

import numpy as np
def weighted_average(group):
weights = group['Volume']
height = group['Height']
return np.average(height,weights=weights)

df.groupby(['STAND_ID','Species']).apply(func = weighted_average).unstack()

关于python - 加权平均 Pandas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47181073/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com