2016-06-21 11 views
3

私は、ユーザーが複数のカテゴリに属している状況があります。パンダ:クロス集計の問題を解決する

UserID Category 
1   A 
1   B 
2   A 
3   A 
4   C 
2   C 
4   A 

A = 1,2,3,4 
B = 1 
C = 2,4 

私はこの使用してパンダのようなデータを示してクロス集計をしたい:

A B C 
A 4 1 2 

B 1 2 0 

C 2 0 2 

私は試してみてください。

df.groupby(UserID).agg(countDistinct('Category')) 

私は上記を行いましたが、対角線にない要素については0を返します。

答えて

2

リストa,bcから最初にDataFrameを作成できます。その後stackmergeオリジナルにする。最後の使用crosstab

a = [1,2,3,4] 
b = [1] 
c = [2,4] 

df1 = pd.DataFrame({'A':pd.Series(a), 'B':pd.Series(b), 'C':pd.Series(c)}) 
print (df1) 
    A B C 
0 1 1.0 2.0 
1 2 NaN 4.0 
2 3 NaN NaN 
3 4 NaN NaN 

df2 = df1.stack() 
     .reset_index(drop=True, level=0) 
     .reset_index(name='UserID') 
     .rename(columns={'index':'newCat'}) 

print (df2) 
    newCat UserID 
0  A  1.0 
1  B  1.0 
2  C  2.0 
3  A  2.0 
4  C  4.0 
5  A  3.0 
6  A  4.0 

df3 = pd.merge(df, df2, on='UserID') 

print (pd.crosstab(df3.newCat, df3.Category)) 
Category A B C 
newCat   
A   4 1 2 
B   1 1 0 
C   2 0 2 
+0

甘いもの..これを解決します..ありがとうございます:) – thealchemist

+0

嬉しいです!いい日! – jezrael

関連する問題