[英]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.