Средний вес для каждой группы панд с неровными рядами? - PullRequest
0 голосов
/ 22 мая 2019

Итак, я хотел найти средневзвешенные оценки для толстых в качестве веса. Проблема в том, что мне нужно делать это каждый раз, когда класс показывает> 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))

Я просто хочу знать, как узнать средний вес по группам на основе диапазонов оценок.

1 Ответ

0 голосов
/ 24 мая 2019

Я получил его, мне пришлось использовать машинное обучение для классификации (я использовал Sklearn Tree), а затем я, наконец, могу использовать групповую обработку в соответствии с результатами древовидной классификации.

def my_agg(x):
    names = np.average(x['Sn (kg/m3)'],weights=x['Thick'],axis=0)
    return pd.Series(names,index=['wavg'])

def my_thick(x):
    tot_thick = np.sum(x['Thick'],axis=0)
    return pd.Series(tot_thick,index=['Thick Sumz'])

...