我创建了一个玩具数据集,以尝试弄清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)
例如
答案 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)