Pandas分组除以最大值

5

我正在尝试通过将每个组中的用户数除以最大用户数来规范化用户计数。我能够得到计算结果(已注释掉的打印语句可行),但我无法使结果保存回原表。下面的代码没有抛出错误,但也没有向weeklyPerson添加任何数据:

weeklyPersonGroups=weeklyPerson.groupby('Person')
PersonMax=weeklyPersonGroups['users'].max()
for name, group in weeklyPersonGroups:
    #print(weeklyPerson[weeklyPerson['Person']==name]['users']/PersonMax[name])
    weeklyPerson[weeklyPerson['Person']==name]['usersNorm']=weeklyPerson[weeklyPerson['Person']==name]['users']/PersonMax[name]
1个回答

7
使用 groupbytransform
weeklyPerson.groupby('Person').users.transform(lambda x: x / x.max())

根据@Jeff建议

weeklyPerson.users / weeklyPerson.groupby('Person').users.transform(np.max)

这样可以避免在不必要的情况下使用lambda

这非常低效;如果不必要,不要在 transform 内部使用 lambda(这里没有必要)。 - Jeff
@Jeff,我正在处理你的这条评论以及其他的评论。 - piRSquared
1
谢谢你们两个的评论!任何一种方法都比我尝试的要优雅得多。Lambda函数有什么使它不那么高效的特点?我发现那个答案看起来更直观。 - econgineer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接