Итак, я хотел найти средневзвешенные оценки для толстых в качестве веса. Проблема в том, что мне нужно делать это каждый раз, когда класс показывает> 0 подряд, и если он равен 0, я все равно хотел бы найти его средневзвешенный вес, хотя он точно равен 0.
Ниже приведены таблицы с результатами, которые я хотел найти. Как вы можете видеть, есть несколько пустых значений / NaN для общей толщины и WA (средний вес). Каждое значение выше пустого значения должно представлять 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
примечание:
Вы можете заметить 01.02.1970, что в его классе есть один 0, но он не является последовательным, поэтому он не считается новой группой. Таким образом, есть только 5 групп с 5 значениями WA (0, 0,71, 0, 4,075, 0)
Я пытался группировать, используя BHID, и мне удалось найти wavg (средневзвешенное значение) для каждого BHID, довольно хорошо
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))
Я просто хочу знать, как узнать средний вес по группам на основе диапазонов оценок.