【发布时间】:2019-12-31 08:24:39
【问题描述】:
我有这个数据框。
df = pd.DataFrame({'userId': [10,20,10,20,10,20,60,90,60,90,60,90,30,40,30,40,30,40,50,60,50,60,50,60],
'movieId': [500,500,800,800,700,700,1100,1100,1900,1900,2000,2000,1600,1600,1901,1901,3000,3000,3025,3025,4000,4000,500,500],
'ratings': [3.5,4.5,2.0,5.0,3.0,1.5,1.5,4.5,2.5,4.5,4.0,5.0,4.0,1.5,4.5,4.5,3.5,4.5,3.0,5.0,4.0,1.5,3.5,5]})
我已将此数据帧转换为不同的块。每 6 行创建一个新块。
After creating chunks it looks like this
df
userId movieId ratings
0 10 500 3.5
1 20 500 4.5
2 10 800 2.0
3 20 800 5.0
4 10 700 4.0
5 20 700 1.5
userId movieId ratings
6 60 1100 3.5
7 90 1100 4.5
8 60 1900 3.5
9 90 1900 4.5
10 60 2000 2.0
11 90 2000 5.0
userId movieId ratings
12 30 1600 4.0
13 40 1600 1.5
14 30 1901 3.5
15 40 1901 4.5
16 30 3000 3.5
17 40 3000 4.5
userId movieId ratings
18 50 3025 2.0
19 60 3025 5.0
20 50 4000 4.0
21 60 4000 1.5
22 50 500 3.5
23 60 500 4.5
我想做的是: 1. 取两个用户看同一部电影的绝对差值(每对用户看了三部电影)。 2.取前两部电影的差异平均值,然后将其与第三部电影的差异进行比较。 如果第三部电影的差异小于前两部电影的平均值,则为正,否则为负。例如,在第一个块 diff b/w 中,第一部电影是 1,下一个是 3(平均 diff 是 2)。对于第三对 diff 是 2.5 (diff > avg),它应该给出否定的结果。 3. 对数据帧中的每个块都这样做。
positive_counter = []
negative_counter = []
numberOfUsers = 2
numberOfMovies = 3
usersLength = numberOfUsers*numberOfMovies
def chunker(seq, size):
return (seq[pos:pos + size] for pos in range(0, len(seq), size))
def finding_rating(df):
for i in chunker(data,usersLength):
df['diff'] = df.groupby('movieId')['ratings'].diff().abs()
#code
【问题讨论】:
标签: python pandas dataframe data-science absolute-value