-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