所以我想找到以“厚”作为权重的等级的平均权重。问题是,每次成绩显示时,我都需要这样做>;连续为0,如果连续为0,我仍然希望找到它的平均重量,尽管它肯定为0
下表列出了我想要找到的结果。如您所见,总厚度和WA(重量平均值)上有几个空值/NaN。空值上面的每个值都表示我需要查找的每个组的WA
基本上,我需要根据它的等级进行分组(要么全部为0,要么全部>;0)然后我需要找到每个组的平均重量
BHID Thick Total Thickness Grade WA
01/01/1970 2 2.5 0 0
01/01/1970 0.5 0
01/01/1970 0.5 2.5 3.35 0.71
01/01/1970 2 0.05
01/01/1970 0.8 1.5 0 0
01/01/1970 0.7 0
01/02/1970 2 4 3.3 4.075
01/02/1970 0.5 2.8
01/02/1970 0.5 0
01/02/1970 1 8.3
01/02/1970 1.7 2.3 0 0
01/02/1970 0.6 0
注: 您可能会注意到,在1970年2月1日,它的等级上有一个单独的0,但它不是连续的,因此不算作新的组。因此,只有5组具有5个WA值(0,0.71,0,4.075,0)
我尝试使用BHID进行分组,并设法找到每个BHID的wavg(加权平均值),非常好
wavg
BHID
1970-01-01 0.273077
1970-02-01 2.587302
但当我尝试按分数分组时,它肯定只是按唯一的分数值分组,这不是我想要的。我试着按年级范围分组
wavg
BHID Grade
1970-01-01 0.00 0.00
3.35 3.35
0.05 0.05
1970-02-01 3.30 3.30
2.80 2.80
0.00 0.00
8.30 8.30
这是我使用的代码
def my_agg(x):
names = np.average(x['Grade'],weights=x['Thick'],axis=0)
return pd.Series(names,index=['wavg'])
print(df1.groupby(['BHID','Grade'],sort=False,).apply(my_agg))
我只是想知道如何根据成绩范围从groupby中找到平均体重
我明白了,我必须利用机器学习进行分类(我使用Sklearn树),然后我最终可以根据树分类的结果使用groupby
相关问题 更多 >
编程相关推荐