我得到一个数据框,如下所示:
user_id label
0 937922 1
1 937922 2
2 937922 2
3 937922 2
4 1369473 1
5 1330642 2
6 1330642 2
7 1330642 1
8 1330642 1
9 411741 1
10 411741 1
11 1552476 2
12 1552476 1
13 1552476 1
... ...
... ...
我想获得label
与2
相对应的user_id
的比例,如下所示:
user_id label
937922 0.7500
1369473 0
1330642 0.5000
411741 0
1552476 0.3333
我知道我应该以某种方式使用pd.groupby
并将其除以pd.groubpy(['user_id']).count()[['type']]
。
但是我很难做到,我找不到想要的东西。
如果不介意有人可以帮助我吗?
预先感谢。
答案 0 :(得分:2)
我会做groupby
+ mean
df.label.eq(2).groupby(df.user_id).mean()
user_id
411741 0.000000
937922 0.750000
1330642 0.500000
1369473 0.000000
1552476 0.333333
Name: label, dtype: float64
答案 1 :(得分:2)
groupby
和value_counts
为您提供所有计数:
df.groupby('user_id').label.value_counts(normalize=True)
输出:
user_id label
411741 1 1.000000
937922 2 0.750000
1 0.250000
1330642 1 0.500000
2 0.500000
1369473 1 1.000000
1552476 1 0.666667
2 0.333333
Name: label, dtype: float64
答案 2 :(得分:1)
将pandas.crosstab
用作:
df = (pd.crosstab(df['user_id'],df['label'], normalize='index').reset_index()
.rename_axis(None, axis=1))
print(df)
user_id 1 2
0 411741 1.000000 0.000000
1 937922 0.250000 0.750000
2 1330642 0.500000 0.500000
3 1369473 1.000000 0.000000
4 1552476 0.666667 0.333333