2013-02-28 36 views
20

我有一個數據框,我想知道給定列有多少次具有最頻繁的值。如何獲取列中最頻繁值的數量?

我嘗試這樣做以下列方式:

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

結果我得到:

ValueError: cannot convert float NaN to integer 

據我瞭解,於第一線,我得到系列,其中來自列的值被用作鍵,並且這些值的頻率被用作值。所以,我只需要找到系列中最大的價值,並且由於某種原因,它不起作用。有人知道如何解決這個問題嗎?

+0

列中是否有'na'?如果是這樣,你應該用'dropna'或'fillna'來擺脫它們。 – beardc 2013-02-28 15:26:54

回答

22

看起來你可能在列中有一些空值。你可以用df = df.dropna(subset=['item'])放下它們。然後df['item'].value_counts().max()應該給你最大的計數,而df['item'].value_counts().idxmax()應該給你最頻繁的值。

+0

而且......我可以這樣做嗎?NA是數值?即如果這是最常見的價值,我很樂意回到NA。 – 2017-07-29 22:47:50

+0

@FullDecent使用'.fillna()'而不是'.dropna()' – beardc 2017-07-31 18:37:55

8

你也可以考慮使用忽略NaN的scipy的mode函數。使用它的解決方案可能看起來像:

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) 

輸出看起來像

(array([[ 2., 3.]]), array([[ 3., 2.]])) 

這意味着最常見的值是2的第一列和3第二,隨着頻率32分別。

7

要繼續回覆@jonathanrocher,您可以在pandas DataFrame中使用mode。它會在行或列中給出最常見的值(一個或兩個):

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 
相關問題