Я предложу что-то другое. Я не буду использовать concat
, вместо этого я буду использовать pd.merge
Проверьте это:
import pandas as pd
df1 = pd.DataFrame({'userId': [1,1,1,2,2,3,4,4],
'movieId': [500,600,700,1100,1200,600,600,1900],
'ratings': [3.5,4.5,2.0,5.0,4.0,4.5,5.0,3.5]})
df2 = pd.DataFrame({'userId':[1,1,2,3,4,5],
'movieId':[500,600,1100,800,900,600],
'tag':['Highly quotable','Boxing story','MMA','Tom Hardy','Fun','long movie']})
# Merging df1 and df2, now you'll not have unnecessary NaN Values
result = df1.merge(df2[['movieId', 'tag']], on='movieId', how='left')
# Grouping by using two tipes of output with agg
result.groupby(by=['movieId', 'tag'], as_index=False).agg({'ratings': ['count', 'mean']})
Вывод будет:
movieId tag ratings
count mean
0 500 Highly quotable 1 3.500000
1 600 Boxing story 3 4.666667
2 600 long movie 3 4.666667
3 1100 MMA 1 5.000000
Надеюсь, что это работает для вас
Редактировать
Как вы спросили в комментариях, если вы хотите отфильтровать фрейм данных, вы можете просто запустить код ниже:
# Removing multiindex columns (just to be easier for you)
result = result.droplevel(0, axis=1)
result.columns = ['userId', 'movieId', 'ratings_count', 'ratings_mean']
# Filtering
result = result[result['ratings_count'] >= 2]
result = result[result['ratings_mean'] >= 3]
Есть лучшие способы сделать это, но я предполагаю, что вы еще не знаете, как работать с Pandas MultiIndex, поэтому я сделал простое решение.