2016-06-19 3 views
2

に複数のカラムに、カウントをGROUPBYするために、私はPythonで次のサンプルデータフレームは、パンダいる:はどのようにパンダ

+---+------+------+------+ 
| | col1 | col2 | col3 | 
+---+------+------+------+ 
| 0 | a | d | b | 
+---+------+------+------+ 
| 1 | a | c | b | 
+---+------+------+------+ 
| 2 | c | b | c | 
+---+------+------+------+ 
| 3 | b | b | c | 
+---+------+------+------+ 
| 4 | a | a | d | 
+---+------+------+------+ 
私はすべての「」B「のカウントを実行したいと思います

、」「C、私はこれを行うことができます

+---+--------+-------+ 
| | letter | count | 
+---+--------+-------+ 
| 0 | a | 4 | 
+---+--------+-------+ 
| 1 | b | 5 | 
+---+--------+-------+ 
| 2 | c | 4 | 
+---+--------+-------+ 
| 3 | d | 2 | 
+---+--------+-------+ 

一つの方法は、GROUPBYを行うTHEN互いの上に列をスタックしている:私はこのようなデータフレームで終わるだろうとそう列1-3間 'と 『D』の値カウントが、私はより良い方法でなければならないように感じる。誰かがこれで私を助けることができますか?

答えて

4

あなたは行にすべての列を置くためにデータフレームをstack()、その後value_counts行うことができます。

df.stack().value_counts() 

b 5 
c 4 
a 4 
d 2 
dtype: int64 
+0

おかげで多くのことを、これは本当に便利です – lollerskates

1

あなたはapplyvalue_countssumとすることができます

print (df.apply(pd.value_counts)) 
    col1 col2 col3 
a 3.0  1 NaN 
b 1.0  2 2.0 
c 1.0  1 2.0 
d NaN  1 1.0 

df1 = df.apply(pd.value_counts).sum(1).reset_index() 
df1.columns = ['letter','count'] 
df1['count'] = df1['count'].astype(int) 
print (df1) 
    letter count 
0  a  4 
1  b  5 
2  c  4 
3  d  2 
関連する問題