2016-05-26 11 views
1

私はパンダのデータフレームを持っています。各列の値の取得と表示方法

DF:

col1 col2 col3 col4 col5 
0 1.0 1.0 NaN NaN 1.0 
1 NaN 1.0 1.0 2.0 1.0 
2 2.0 NaN 1.0 NaN 1.0 

私は、同じデータに次のように各列を持つ行のカウント数を取得したいです。

出力:

col1 col2 col3 col4 col5 
1.0 1 2 2 0 3 
2.0 1 0 0 1 0 

または値の数だけ。

col1 col2 col3 col4 col5 
1.0 1 2 2 0 3 

期待どおりの出力を得る方法はありますか?

答えて

0

あなたはNaN値を満たすためのパンダシリーズのvalue_countsメソッドを使用して、fillnaができ0で:

In [7]: df 
Out[7]: 
    col1 col2 col3 col4 col5 
0 1.0 1.0 NaN NaN 1.0 
1 NaN 1.0 1.0 2.0 1.0 
2 2.0 NaN 1.0 NaN 1.0 

In [8]: df.apply(lambda x: x.value_counts()).fillna(0) 
Out[8]: 
    col1 col2 col3 col4 col5 
1.0  1 2.0 2.0 0.0 3.0 
2.0  1 0.0 0.0 1.0 0.0 

あなたの代わりにフロートのint値が必要な場合また、intastypeを使用することができます。

In [9]: df.apply(lambda x: x.value_counts()).fillna(0).astype(int) 
Out[9]: 
    col1 col2 col3 col4 col5 
1.0  1  2  2  0  3 
2.0  1  0  0  1  0 
+0

ありがとうございました!出来た。 :) –

0

編集df.replace(np.NaN、0)バージョン間で確実に動作しませんが、そうdf.fillna(0)の代わりに使用するように更新します。

各列の値の出現をカウントするには、value_countsを使用します。非発生値はNaNになるので、0と交換する必要があります。

>>> df.apply(pd.value_counts).fillna(0) 


    col1 col2 col3 col4 col5 
1  1  2  2  0  3 
2  1  0  0  1  0 

特定の行を取得するには:

>>> df.apply(pd.value_counts).fillna(0).loc[1:1] 

    col1 col2 col3 col4 col5 
1  1  2  2  0  3 
+0

私はnp.Nanと交換使用しようとしたが、それは現時点では動作しませんでした。私はその理由を調査します、情報のおかげで! –

+0

NaN == NaNがFalseであるので、私はそれがうまくいって驚いた。おそらく私のバージョンのPandasにはあなたの持っていないNaNを置き換える特別な処理がありますか?私はこれに注意するために私の答えを更新します。 – Neapolitan

+0

"replace(np.NaN、0)"をやり直してみましたが、正常に動作しました。私はあなたの方法が急いでいるので私は現時点でその理由を調査しなかったとして働いていたはずだと思う。このようなことを知らせてくれてありがとう! –

関連する問題