2017-10-28 4 views
1

私はPythonには新しく、最初にRow Totalsで、次にColumn Totalsでユーザームービーレーティングのデータフレームをサブセット化しようとしています。列の合計によるフィルタが完了するまでに数時間かかるので、コードを最適化するためのいくつかのポインタを提供できるかどうかは疑問でした。行と列の合計でデータフレームをサブセット化

data_cols = ['user_id','movie_id','rating'] 
    data = pd.read_csv('netflix_data/TrainingRatings.txt', sep=',', names=data_cols) 
    utrain = (data.sort_values('user_id')) 
    print(utrain.tail()) 

    Movie_Ratings = utrain.pivot_table(index = ['user_id'],columns = ['movie_id'], values = ['rating'], aggfunc = lambda x:x) 
    Movie_Ratings.head() 
    Movie_Ratings = Movie_Ratings.fillna(0) 

    #Filter by column totals 
    Movie_Ratings.loc[len(Movie_Ratings)] = [Movie_Ratings[col].sum() for col in Movie_Ratings.columns] 

    ##Following portion is taking the maximum amount of time 
    x = Movie_Ratings.loc[len(Movie_Ratings)-1] 
    for col in Movie_Ratings.columns: 
     if(x[col] <= 500): 
      Movie_Ratings.drop(col,axis = 1, inplace = True) 

答えて

0

まずあなただけDataFrame.sumを使用することができます。その後、

Movie_Ratings.loc[len(Movie_Ratings)] = Movie_Ratings.sum() 

やループせずにフィルタを:

np.random.seed(100) 
Movie_Ratings = pd.DataFrame(np.random.randint(250, size=(5,5)), columns=list('ABCDE')) 
print (Movie_Ratings) 
    A B C D E 
0 8 24 67 103 87 
1 79 176 138 94 180 
2 98 53 66 226 14 
3 34 241 240 24 143 
4 228 107 60 58 144 

Movie_Ratings.loc[len(Movie_Ratings)] = Movie_Ratings.sum() 
Movie_Ratings = Movie_Ratings.loc[:, ~(Movie_Ratings.iloc[-1] <= 500)] 
#Orchange condition to > and remove ~ for invert condition 
#Movie_Ratings = Movie_Ratings.loc[:, (Movie_Ratings.iloc[-1] > 500)] 
print (Movie_Ratings) 
    B C D E 
0 24 67 103 87 
1 176 138 94 180 
2 53 66 226 14 
3 241 240 24 143 
4 107 60 58 144 
5 601 571 505 568 

説明:

print (Movie_Ratings.iloc[-1]) 
A 447 
B 601 
C 571 
D 505 
E 568 
Name: 5, dtype: int64 

print (Movie_Ratings.iloc[-1]<= 500) 
A  True 
B False 
C False 
D False 
E False 
Name: 5, dtype: bool 

print (~(Movie_Ratings.iloc[-1]<= 500)) 
A False 
B  True 
C  True 
D  True 
E  True 
Name: 5, dtype: bool 
+0

あなたが二行目を説明できますか? –

+0

確かに、私に秒を教えてください – jezrael

+0

申し訳ありません、編集された答えを確認してください。 – jezrael

関連する問題