如何获取列中最常值的数字?

Rom*_*man 44 python counter frequency series pandas

我有一个数据框,我想知道给定列有多少次具有最频繁的值.

我试着用以下方式做到这一点:

items_counts = df['item'].value_counts()
max_item = items_counts.max()
Run Code Online (Sandbox Code Playgroud)

结果我得到:

ValueError: cannot convert float NaN to integer
Run Code Online (Sandbox Code Playgroud)

据我所知,在第一行我得到的系列中,列的值被用作键,这些值的频率被用作值.所以,我只需要找到该系列中最大的值,并且由于某种原因,它不起作用.有谁知道如何解决这个问题?

bea*_*rdc 53

看起来你可能在列中有一些空值.你可以放弃它们df = df.dropna(subset=['item']).那么df['item'].value_counts().max()应该给你最大数量,并且df['item'].value_counts().idxmax()应该给你最频繁的价值.


Ant*_*pov 15

要继续@jonathanrocher回答你可以mode在pandas DataFrame中使用.它会在行或列中给出最常见的值(一个或两个):

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
Run Code Online (Sandbox Code Playgroud)


jon*_*her 12

您也可以考虑使用mode忽略NaN的scipy 函数.使用它的解决方案可能如下所示:

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)
Run Code Online (Sandbox Code Playgroud)

输出看起来像

(array([[ 2.,  3.]]), array([[ 3.,  2.]]))
Run Code Online (Sandbox Code Playgroud)

意思是最常见的值是2第一列和3第二列3,2分别是频率和.