分组和加权平均

2024-10-01 13:32:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧:

import pandas as pd
import numpy as np

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]),('Stems',[1500,2000,1000,1200,1700,1000]),('Volume',[200,100,300,50,100,10])])

   STAND_ID      Species  Height  Stems  Volume
0         1      Conifer      20   1500     200
1         1  Broadleaves      19   2000     100
2         2      Conifer      13   1000     300
3         3  Broadleaves      24   1200      50
4         3      Conifer      25   1700     100
5         3      Conifer      18   1000      10

我想按林分和物种分组,对高度和茎应用加权平均值,体积作为重量,不堆叠。在

所以我试着:

^{pr2}$

这给了我一个错误:

builtins.KeyError: 'Height'

我该怎么解决这个问题?在


Tags: 数据importnumpyidpandasasnppd
1条回答
网友
1楼 · 发布于 2024-10-01 13:32:41

您的错误是因为您不能使用agg执行多个系列/列操作。Agg以一个序列/列作为一个时间。让我们使用applypd.concat。在

g = df.groupby(['STAND_ID','Species'])
newdf = pd.concat([g.apply(lambda x: np.average(x['Height'],weights=x['Volume'])), 
                   g.apply(lambda x: np.average(x['Stems'],weights=x['Volume']))], 
                   axis=1, keys=['Height','Stems']).unstack()

编辑更好的解决方案:

^{pr2}$

输出:

              Height                  Stems             
Species  Broadleaves    Conifer Broadleaves      Conifer
STAND_ID                                                
1               19.0  20.000000      2000.0  1500.000000
2                NaN  13.000000         NaN  1000.000000
3               24.0  24.363636      1200.0  1636.363636

相关问题 更多 >