【问题标题】:Normalize values in DataFrame规范化 DataFrame 中的值
【发布时间】:2016-03-06 03:58:31
【问题描述】:

我需要的是通过以下过程规范下面的评分列:

  1. 按用户字段 ID 分组。
  2. 找出每个用户的平均评分。
  3. 找到每个用户的评论提示并减去用户的平均评分。

我有这个数据框:

                user       rating
 review_id
         a      1          5
         b      2          3
         c      1          3
         d      1          4
         e      3          4
         f      2          2
...

然后我计算每个用户的平均值:

 >>>data.groupby('user').rating.mean()

 user
 1       4
 2       2.5
 3       4

我需要的最终结果是:

                user       rating
 review_id
         a      1          1
         b      2          0.5
         c      1          -1
         d      1          0
         e      3          0
         f      2          -0.5
...

数据框如何有效地提供这种功能?

【问题讨论】:

  • 您确定评分列中的值是数字吗?试试data['rating'] = data.rating.astype('int') 然后运行你的groupby。
  • @Alexander 是的,就是这样。
  • @binarysubstrate 对此持保留态度,因为我是熊猫新手。我认为您发布的这个线程使用静态值对每一行进行了规范化,所以我想我想要一种不同类型的规范化。
  • 很公平。我删除了我的评论,但事实证明无法撤回标记。

标签: python python-3.x pandas dataframe ipython-notebook


【解决方案1】:

您可以使用groupby().transform() 来执行此操作,请参阅http://pandas.pydata.org/pandas-docs/stable/groupby.html#transformation

在这种情况下,按'user' 分组,然后为每个组减去该组的平均值(您提供给transform 的函数应用于每个组,但结果保持原始索引):

In [7]: data.groupby('user').transform(lambda x: x - x.mean())
Out[7]:
           rating
review_id
a             1.0
b             0.5
c            -1.0
d             0.0
e             0.0
f            -0.5

【讨论】:

    猜你喜欢
    • 2012-08-21
    • 2014-11-20
    • 2016-07-23
    • 2013-09-06
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    • 2019-09-27
    相关资源
    最近更新 更多