2017-08-06 12 views
2

の各要素を取得:は、私は下記のデータセットを持っているパンダのクロス集計

a,b,c 
1,1,1 
1,1,1 
1,1,2 
2,1,2 
2,1,1 
2,2,1 

私はパンダとのクロス集計を作成しました:

cross_tab = pd.crosstab(index=a, columns=[b, c], rownames=['a'], colnames=['b', 'c']) 

私のクロス集計を出力として与えられる:

b  1  2 
c  1 2 1 
a   
1  2 1 0 
2  1 1 1 

それぞれのa、b、cの値を指定してこのクロス集計を繰り返していきたいと思います。 cross_tab[a=1][b=1, c=1]などの値を取得するにはどうすればよいですか?ありがとうございました。

答えて

2

あなたはslicersを使用することができます。

a,b,c = 1,1,1 
idx = pd.IndexSlice 
print (cross_tab.loc[a, idx[b,c]]) 
2 

あなたはまた、DataFrame.unstackによってdfを再形成reorder_levels、その後locを使用することができます。

a = cross_tab.unstack().reorder_levels(('a','b','c')) 
print (a) 
a b c 
1 1 1 2 
2 1 1 1 
1 1 2 1 
2 1 2 1 
1 2 1 0 
2 2 1 1 
dtype: int64 

print (a.loc[1,1,1]) 
2 
+0

感謝あなたのためにあなたswer。私は今、別の問題があります。 print(cross_tab2.loc [2,2,2])を実行するとエラーが返されます。クロス集計でa、b、cの値を取得するにはどうすればよいですか? – user3104352

+0

'a'でループしますか?あるいは 'print(cross_tab2.loc [2,2,2])'が何を出力しているのでしょうか? – jezrael

+0

私は実際には、a、b、cのすべての可能な組み合わせをループしたいと思います。または、クロス集計に存在するa、b、cのすべての値をループすることができます。 – user3104352

1

あなたはdf2.xxx.get_level_valuesを探しています:

In [777]: cross_tab.loc[cross_tab.index.get_level_values('a') == 1,\ 
         (cross_tab.columns.get_level_values('b') == 1)\ 
         & (cross_tab.columns.get_level_values('c') == 1)] 
Out[777]: 
b 1 
c 1 
a 
1 2 
関連する問題