Python 按分组并计算1/计数

Python 按分组并计算1/计数,python,pandas,Python,Pandas,我有一个熊猫数据框,如下所示: id val 1 10 1 20 2 19 2 21 2 15 现在我想按id分组,并将权重列计算为每组行数的1/count。因此,最终的数据帧如下所示: id val weight 1 10 0.5 1 20 0.5 2 19 0.33 2 21 0.33 2 15 0.33 实现这一点最简单的方法是什么?与除法一起使用: df['weight'] = 1 / df.groupby('id')['id'].transform('

我有一个熊猫数据框,如下所示:

id val
1  10
1  20
2  19
2  21
2  15
现在我想按id分组,并将权重列计算为每组行数的1/count。因此,最终的数据帧如下所示:

id val weight
1  10  0.5
1  20  0.5
2  19  0.33
2  21  0.33
2  15  0.33
实现这一点最简单的方法是什么?

与除法一起使用:

df['weight'] = 1 / df.groupby('id')['id'].transform('size')
#alternative
#df['weight'] = df.groupby('id')['id'].transform('size').rdiv(1)
或与:

df['weight'] = 1 / df['id'].map(df['id'].value_counts())
#alternative
#df['weight'] = df['id'].map(df['id'].value_counts()).rdiv(1)

print (df)
   id  val    weight
0   1   10  0.500000
1   1   20  0.500000
2   2   19  0.333333
3   2   21  0.333333
4   2   15  0.333333