2013-02-28 11 views
20

私はデータフレームを持っており、与えられた列が最も頻繁に値を持つ回数を知りたいと思います。列内の最も頻繁な値の番号を取得する方法は?

私は、次の方法でそれをやろう:

ValueError: cannot convert float NaN to integer 

私の知る限り理解し、私はシリーズを取得する最初の行で:

items_counts = df['item'].value_counts() 
max_item = items_counts.max() 

私が得る結果列の値がキーとして使用され、これらの値の頻度が値として使用されます。だから、シリーズの中で最大の価値を見いだすだけでいいし、なんらかの理由でうまくいかない。誰もこの問題を解決する方法を知っていますか?

+0

あなたの列には「na」がありますか?もしそうなら、あなたは 'dropna'または' fillna'でそれらを取り除くべきです。 – beardc

答えて

22

カラムにNULLがあるようです。あなたはdf = df.dropna(subset=['item'])でそれらをドロップすることができます。その後、df['item'].value_counts().max()はあなたに最大カウントを与え、df['item'].value_counts().idxmax()はあなたに最も頻繁に価値を与えるはずです。

+0

そして... NAは値として数えられるようにすることはできますか?私。それが最も一般的な価値であるならば、私はNAを返すことを嬉しく思っています。 –

+0

@FullDecentは '.dropna()'の代わりに '.fillna()'を使います。 – beardc

8

また、scipyのmode関数を使ってNaNを無視することも考えられます。出力は周波数32で、

最も一般的な値は、第二の最初の列と 3ため 2であることを意味
(array([[ 2., 3.]]), array([[ 3., 2.]])) 

ようになり

from scipy.stats import mode 
from numpy import nan 
df = DataFrame({"a": [1,2,2,4,2], "b": [nan, nan, nan, 3, 3]}) 
print mode(df) 

:それはのようになります。使用したソリューションそれぞれ、

7

@jonathanrocherの回答を続けるには、modeをpandas DataFrameに使用することができます。行または列全体で最も頻繁な値(1または2)を返します。

import pandas as pd 
import numpy as np 
df = pd.DataFrame({"a": [1,2,2,4,2], "b": [np.nan, np.nan, np.nan, 3, 3]}) 

In [2]: df.mode() 
Out[2]: 
    a b 
0 2 3.0 
関連する問題