规范化 DataFrame 中的值
Normalize values in DataFrame
我需要的是通过以下过程规范化下面的评分栏:
- 按用户字段 ID 分组。
- 找出每个用户的平均评分。
- 找到每个用户的评论提示并减去用户的平均评分。
我有这个数据框:
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
...
数据框如何有效地提供这种功能?
您可以使用 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
我需要的是通过以下过程规范化下面的评分栏:
- 按用户字段 ID 分组。
- 找出每个用户的平均评分。
- 找到每个用户的评论提示并减去用户的平均评分。
我有这个数据框:
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
...
数据框如何有效地提供这种功能?
您可以使用 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