簡體   English   中英

通過另一列的分組值的總和對pandas數據框中的列進行歸一化

[英]Normalize column in pandas dataframe by sum of grouped values of another column

我在嘗試規范化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     |B   |1
3     |C   |1
2     |B   |2
3     |C   |2

我想將每個用戶購買的總數量歸一化的每個購買項目的數量。

換句話說,對於“已購買”的每個條目,我都希望將其除以該用戶所購買的總和(作為另一列)。 在這種情況下,我想要的輸出是這樣(但“歸一化”列不必是分數):

bought|item|user|normalized
--------------------------
1     |A   |0   |1/2
1     |B   |0   |1/2
1     |A   |1   |1/7
3     |B   |1   |3/7
3     |C   |1   |3/7
2     |B   |2   |2/5
3     |C   |2   |3/5

到目前為止,我已經按用戶分組並得到了用戶的總和:

grouped = df.groupby(by='user')
grouped.aggregate(np.sum)

但是現在我被困住了。 謝謝!

pandas map

df.assign(normalized=df.bought.div(df.user.map(df.groupby('user').bought.sum())))

pandas transform

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM