Я использую следующие строки кода для вычисления условных вероятностей
variable = 'variable_name'
probs = df.groupby(variable).size().div(len(df))
cond_probs = df.groupby([variable, 'has_income']).size().div(len(df)).div(probs, axis=0, level=variable)
Эти результаты приводят к следующему выводу:
varibale_name has_income
(0.999, 2.0] False 0.756323
True 0.243677
(2.0, 3.0] False 0.798372
True 0.201628
(3.0, 16.0] False 0.809635
True 0.190365
Я хотел бы добавить дополнительный столбецв качестве размера выборки для каждой группы, но я не могу переписать формулу внутри лямбда-функции, потому что у объекта группы нет тех же методов, что и у объектов, возвращаемых df.groupby () .Пример:
cond_probs =df.groupby([variable, 'has_income']).apply(lambda x:
pd.Series({
'probs': x.size().div(len(df)).div(probs, axis=0, level=variable),
'size': x.size()
}))
Ошибка: TypeError: объект 'numpy.int32' не может быть вызван
Есть ли альтернатива для достижения этих результатов необычным способом, безвычислить два сгруппированных и соединить фреймы данных в конце?