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

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 是这样的:

最佳答案

如果 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/

10-12 13:29