Python 通过另一列的分组值之和规范化dataframe中的列

Python 通过另一列的分组值之和规范化dataframe中的列,python,pandas,Python,Pandas,我一直在尝试规范化数据帧中列的某些条目。所以我有一个这样的数据帧: df = pd.DataFrame({ 'user':[0,0,1,1,1,2,2], 'item':['A','B', 'A', 'B','C','B','C'], 'bought':[1,1,1,3,3,2,3]}) df bought|item|user ---------------- 1 |A |0 1 |B |0 1 |A |1 3

我一直在尝试规范化数据帧中列的某些条目。所以我有一个这样的数据帧:

df = pd.DataFrame({
        'user':[0,0,1,1,1,2,2], 
        'item':['A','B', 'A', 'B','C','B','C'],
        'bought':[1,1,1,3,3,2,3]})
df
bought|item|user
----------------
1     |A   |0
1     |B   |0
1     |A   |1
3     |B   |1
3     |C   |1
2     |B   |2
3     |C   |2
我想得到每个用户购买的物品总数的标准化数量

换句话说,对于“购买”的每个条目,我想将其除以为该用户购买的总金额(作为另一列)。在这种情况下,我希望的输出是这样的(但“normalized”列不必是分数):

到目前为止,我已经按用户分组,并按用户得到了总和:

grouped = df.groupby(by='user')
grouped.aggregate(np.sum)
但在这一点上,我被卡住了。谢谢

熊猫
地图
熊猫
变换

两者都屈服

   bought item  user  normalized
0       1    A     0    0.500000
1       1    B     0    0.500000
2       1    A     1    0.142857
3       3    B     1    0.428571
4       3    C     1    0.428571
5       2    B     2    0.400000
6       3    C     2    0.600000
df.assign(normalized=df.bought.div(df.user.map(df.groupby('user').bought.sum())))
df.assign(normalized=df.bought.div(df.groupby('user').bought.transform('sum')))
   bought item  user  normalized
0       1    A     0    0.500000
1       1    B     0    0.500000
2       1    A     1    0.142857
3       3    B     1    0.428571
4       3    C     1    0.428571
5       2    B     2    0.400000
6       3    C     2    0.600000