-1
在數據幀歸組時,我有在以下的形式的數據幀:獲取NaN值使用的GroupBy
user_ID song_ID listens
------- ------ -------
U0 S1 14
U0 S2 4
U1 S3 23
U1 S4 10
我想跨用戶正常化所以我嘗試:
grouped = df['listens'].groupby(df['user_ID'])
min_max = lambda x: (5-1)*((x - x.min())/(x.max()-x.min())) + 1
df['normal_L'] = grouped.transform(min_max)
對於它的大部分工作!出現問題的是它也試圖規範用戶ID。我如何知道這一點,是我得到的NaN值是在下一個用戶的歷史開始的時間間隔內。因此,像這樣......
user_Id song_ID listens normal_L
------- ------ ------- --------
U0 S1 14 5
U0 S2 4 3
U1 S3 23 NaN
U1 S4 10 5
我很困惑,如何解決這個問題,因爲邏輯用戶是有道理的,即你組監聽。對於每個監聽,執行最小 - 最大規範化,然後將其保存到原始數據幀中。
首先,您的示例不一致('UserId' vs'user_ID','values' vs'Normal_L'等)請編輯它。其次,我將你的函數應用於你的數據並得到了正確的結果('5 1 5 1',而不是'5 3 NaN 5')。你可能想仔細檢查你的例子。至於NaN,你必須在'x.max()== xmin()'時得到它們,在這種情況下你的'min_max'是未定義的。你必須自己決定什麼是歌曲的排名,如果他們全部具有相同的「聽」值。 – DyZ
我修正了不一致之處,謝謝。這些數據僅僅是一個例子,表明發生了什麼,所以你說得對,當'listen'的值是統一的時,NaN可能會發生,那就是x.max()== x.min ()。我將不得不作出檢查的條件。 – mmera