我有这个数据框:
0 name data
1 alex asd
2 helen sdd
3 alex dss
4 helen sdsd
5 john sdadd
我正在尝试获取最常见的一个或多个值(在这种情况下是值)。 所以我的做法是:
dataframe['name'].value_counts().idxmax()
但它只返回值:Alex,即使它Helen也出现了两次。
通过使用mode
df.name.mode()
Out[712]:
0 alex
1 helen
dtype: object
# get top 10 most frequent names
n = 10
dataframe['name'].value_counts()[:n].index.tolist()
你可以尝试使用如下的 argmax
方法:
dataframe['name'].value_counts().argmax()
Out[13]: 'alex'
value_counts
方法会返回一个 pandas.core.series.Series
的计数对象,而 argmax
方法则可以用于获取最大值对应的键。
argmax
is deprecated for idmax
- Bhoomtawath Plinsutidmax
,而是 idxmax
。 - ralvarez它将给出前五个最常见的名称:
df['name'].value_counts().nlargest(5)
df['name'].value_counts()[:5].sort_values(ascending=False)
value_counts
会返回一个pandas.core.series.Series
的计数对象,sort_values(ascending=False)
会将最高值放在前面。
使用:
df['name'].mode()
df['name'].value_counts().idxmax()
df['name'].value_counts()
df['name'].value_counts()[df['name'].value_counts() == df['name'].value_counts().max()]
这会打印出:
helen 2
alex 2
Name: name, dtype: int64
只需使用以下代码,便可实现...
dataframe['name'].value_counts().nlargest(n)
频率最高和最低的功能是:
nlargest()
用于最常见的 'n' 个值nsmallest()
用于最不常见的 'n' 个值看似不明显,但速度飞快
f, u = pd.factorize(df.name.values)
counts = np.bincount(f)
u[counts == counts.max()]
array(['alex', 'helen'], dtype=object)
df.reset_index().groupby(df['name'])['index'].agg(list).loc[lambda x : x.str.len() ==x.str.len().max()]
。 - BENY