我有一个数据集,其中行=客户,列=产品。根据订单数量,每个客户可以有多行。
目标=具有权重的新列
示例:
ID Weight
1 1
2 1/2
2 1/2
有功能吗?
答案 0 :(得分:1)
您可以使用groupby
来获取每个列表中的元素数,然后用1除以该值以获取每一行的权重。
df = pd.DataFrame({'a': {0: 1, 1: 0, 2: 0, 3: 2, 4: 2, 5: 0, 6: 2, 7: 1, 8: 0, 9: 1}})
df['dupweight'] = 1 / df.groupby('a')['a'].transform(len)
df.sort_values('a')
a dupweight
1 0 0.250000
2 0 0.250000
5 0 0.250000
8 0 0.250000
0 1 0.333333
7 1 0.333333
9 1 0.333333
3 2 0.333333
4 2 0.333333
6 2 0.333333