簡體   English   中英

在 Pandas 中查找另一列值集的公共列值

[英]Finding common column value for set of another column values in pandas

我有這個數據框。 我從我的數據中隨機選擇了三個用戶。 我想在我的數據框中選擇這些選定用戶之間的常見電影。

df 

  userId             movieId  ratings   
0       1                 500      3.5
1       1                 600      4.5
2       1                 700      2.0
3       1                 800      4.0
4       2                 500      3.5
5       2                 600      4.5
6       2                 9400     2.0
7       3                 800      4.0
8       3                 600      2.0
9       3                 500      4.0

預期結果:

  userId             movieId  ratings   
0       1                 500      3.5
1       2                 500      3.5
2       3                 500      4.0
3       1                 600      4.5
4       2                 600      4.5
5       3                 600      2.0

實際上,我對這個問題有這種方法。 但我會很感激,有人采取不同的方法。

def usersToMovies(rand_users):
    df1 = df.groupby('movieId')['userId'].apply(list).reset_index(name='users')
    # Check for rand_users in each list of users and filter rows.

想法是通過重塑DataFrame.pivot ,所以不常見movieId列創建缺失值,這樣你就可以刪除它們DataFrame.dropna和重塑背部DataFrame.unstack

df1 = (df.pivot(index='userId', columns='movieId', values='ratings')
         .dropna(axis=1)
         .unstack()
         .reset_index(name='ratings'))
print (df1)
   movieId  userId  ratings
0      500       1      3.5
1      500       2      3.5
2      500       3      4.0
3      600       1      4.5
4      600       2      4.5
5      600       3      2.0

您可以從數據框中直接選擇。 這種方法的好處是在重要時保留原始索引:

selection = df[df['movieId'].isin(df[['userId', 'movieId']].groupby('movieId').count()
                                  .reset_index().query('userId > 1')['movieId'])]

它給:

   userId  movieId  ratings
0       1      500      3.5
1       1      600      4.5
3       1      800      4.0
4       2      500      3.5
5       2      600      4.5
7       3      800      4.0
8       3      600      2.0
9       3      500      4.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM