[英]finding common value in one column against distinct value in another column in 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.