2016-07-15 9 views
1

基本的には、ユーザーが視聴した動画のウォッチは1以外の0で示されます。ユーザーはデータフレームのインデックスです。すべての列の値をパンダのデータフレームのインデックスでグループ化する

A B C 
User1 1 1 0 
User2 0 1 0 
User3 1 0 1 

それぞれがその行のすべての1のカウントを使用するために私がしたい:

は、データがこのようなものですと仮定します。

私はこのようなことをしていますが、うまくいかないようです。私はいくつかのapplymap関数を使いたいと思っていません。

は、データフレームの転置メソッドを使用します

+3

'df.sum(axis = 1)'は機能しますか? – Psidom

+0

インデックスに重複したエントリがありますか? – ayhan

+0

重複するインデックスはありません。 .sum(軸= 1)が機能しないのはなぜですか? – Baktaawar

答えて

-1

を認識していない軸誤差を与えます。

In [38]: d = pd.DataFrame({'A':[1,0,1],'B':[1,1,0],'C':[0,0,1]},index=['User1','User2','User3']) 

In [39]: d 
Out[39]: 
     A B C 
User1 1 1 0 
User2 0 1 0 
User3 1 0 1 

In [40]: d.transpose() 
Out[40]: 
    User1 User2 User3 
A  1  0  1 
B  1  1  0 
C  0  0  1 

In [41]: d.transpose().sum() 
Out[41]: 
User1 2 
User2 1 
User3 2 
dtype: int64 

または、Psidomが提案したように、DataFrameの列を合計します。

In [55]: d.sum(axis=1) 
Out[55]: 
User1 2 
User2 1 
User3 2 
dtype: int64 
+0

実際、df.sum(軸= 1)がより良い解決策です。 – mtadd

0

あなたがインデックスに重複がある場合は、二重のsumgroupbyを使用することができます。

print (df) 
     A B C 
User1 1 1 0 
User1 1 1 1 
User2 0 1 0 
User3 1 0 1 

print (df.groupby(df.index).sum().sum(1)) 
User1 5 
User2 1 
User3 2 
dtype: int64 

重複しない場合は、唯一のsum使用 - Psidom commentを:

df.sum(axis=1) 

EDIT:

import matplotlib.pyplot as plt 

df.sum(axis=1).plot.hist() 
plt.show() 

graph

+0

うんdf.sum(1)が機能します。 sum()のヒストグラムをユーザー数で取得するとどういうことですか? 。 2番目の列をx軸としてプロットし、ヒストグラムとしてのインデックスの数を – Baktaawar

+0

正しく編集できない場合は、編集を確認してください。 – jezrael

+0

それは3つのグラフでなければなりません。それぞれ1,2、および5に1つです。それぞれのユーザーが1人ずつであるため、これらの数は同じになります。 – Baktaawar

関連する問題