【发布时间】:2019-07-03 21:08:53
【问题描述】:
我正在使用以下代码行来计算条件概率
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
我想在输出中添加一个附加列作为每个组的样本大小,但我无法重写 lambda 函数内的公式,因为组对象没有与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' 对象不可调用
是否有任何替代方法可以以奇特的方式实现这些结果,而不需要计算两个 groupby 并在最后加入数据帧?
【问题讨论】:
-
你试过
x.size,不带括号吗?
标签: python pandas dataframe pandas-groupby