由另一列分组的二进制目标变量的value_counts之比

时间:2019-09-10 06:45:54

标签: python python-3.x pandas pandas-groupby

我创建了一个玩具数据集,以尝试弄清df.groupby的工作原理。

df = pd.DataFrame({"A": [1,2,3,1,2,3,1,2,3,1,2,3], "B": ['m','f','m','m','f','m','f','f','f','m','f','m'],
                  'target': [0,0,0,1,1,0,1,0,0,1,1,0]})

我的“目标”变量只有2个级别,即0和1。我可以对变量'B'进行总计,如下所示:

b = df.groupby('B').target.value_counts()

输出看起来像这样:

    B  target
f  0         3
   1         3
m  0         4
   1         2
Name: target, dtype: int64

但是'B'是绝对的。我想做的是,对于'B'的每个级别,获取比率

  

(针对target = 1的value_counts)/(针对target = 0的value_counts)

例如

  • 对于B = f,我需要3/3
  • 对于B = m,我需要2/4。

2 个答案:

答案 0 :(得分:2)

您可以使用.apply()

def cal_ratio(x):
    n_1 = sum(x['target'].values == 1)
    n_0 = sum(x['target'].values == 0)
    return '{:}/{:}'.format(n_1, n_0)

b = df.groupby('B').apply(cal_ratio)
print(b)

# Output
# B
# f    3/3
# m    2/4
# dtype: object

答案 1 :(得分:1)

您可以使用pandas.Series.unstack

c=b.unstack()
c[1]/c[0]

输出:

    B
f   1.00
m   0.50
dtype: float64
b