【问题标题】: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




【问题讨论】:

    标签: python pandas dataframe data-science absolute-value


    【解决方案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] 的所有结果附加到一个列表中。我正在尝试,但遇到了一些错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    相关资源
    最近更新 更多