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
分别是频率和.