查找行之间的绝对差异并将差异与其他行进行比较
Posted
技术标签:
【中文标题】查找行之间的绝对差异并将差异与其他行进行比较【英文标题】:Finding absolute difference between rows and comparing the difference with other rows 【发布时间】: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
【问题讨论】:
【参考方案1】:对于一个块,你可以应用这个:
dfchunk
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
r=dfchunk.pivot(index="movieId",columns="userId")
ratings
userId 10 20
movieId
500 3.5 4.5
700 4.0 1.5
800 2.0 5.0
r.columns=["u1","u2"]
r["drate"]=r.u1.sub(r.u2).abs()
u1 u2 drate
movieId
500 3.5 4.5 1.0
700 4.0 1.5 2.5
800 2.0 5.0 3.0
v= r.drate.iloc[:-1].mean()-r.drate.iloc[-1]
-1.25
编辑:
if v<0:
negative_counter.append(v)
else:
positive_counter.append(v)
【讨论】:
我可以将来自v= r.drate.iloc[:-1].mean()-r.drate.iloc[-1]
的所有结果附加到一个列表中。我正在尝试,但遇到了一些错误。以上是关于查找行之间的绝对差异并将差异与其他行进行比较的主要内容,如果未能解决你的问题,请参考以下文章