我有一个这样的系列: 第一列是user_id,第二列是表示重新排序的次数= 0/1的标志。一些用户没有重新排序,例如,用户21。 我想得到一个新的列比率,它是从时间(0)/次(1& 0)。 例如,对于用户1,比率是1 /(1 + 10)。我怎么能这样做。
user_id reordered
1 0.0 1
1.0 10
15 0.0 1
1.0 4
19 0.0 1
1.0 2
21 0.0 1
31 0.0 1
1.0 1
43 0.0 1
1.0 1
52 0.0 1
1.0 13
67 0.0 1
1.0 19
81 0.0 1
1.0 1
82 0.0 1
1.0 8
98 0.0 1
1.0 6
109 0.0 1
120 0.0 1
1.0 1
185 0.0 1
答案 0 :(得分:3)
(dff.xs(0, level='reordered') / dff.groupby(level='user_id').sum()).rename('ratio')
user_id
1 0.090909
15 0.200000
19 0.333333
21 1.000000
31 0.500000
43 0.500000
52 0.071429
67 0.050000
81 0.500000
82 0.111111
98 0.142857
109 1.000000
120 0.500000
185 1.000000
Name: ratio, dtype: float64
答案 1 :(得分:1)
<强>设置强>
diff
user_id reordered
1 0 1
1 10
15 0 1
1 4
19 0 1
1 2
21 0 1
31 0 1
1 1
43 0 1
1 1
52 0 1
1 13
67 0 1
1 19
81 0 1
1 1
82 0 1
1 8
98 0 1
1 6
109 0 1
120 0 1
1 1
185 0 1
<强>解决方案强>
#group by userid, sum count on 0s and then divide by sum of all.
diff.name = 'count'
diff.reset_index().groupby('user_id').apply(lambda x: x[x.reordered==0]['count'].sum()/float(x['count'].sum()))
user_id
1 0.090909
15 0.200000
19 0.333333
21 1.000000
31 0.500000
43 0.500000
52 0.071429
67 0.050000
81 0.500000
82 0.111111
98 0.142857
109 1.000000
120 0.500000
185 1.000000
dtype: float64