Pandas获得列的最常见值

ale*_*ale 19 python dataframe pandas

我有这个数据帧:

0 name data
1 alex asd
2 helen sdd
3 alex dss
4 helen sdsd
5 john sdadd
Run Code Online (Sandbox Code Playgroud)

所以我试图获得最频繁的值或值(在这种情况下它的值) 所以我做的是:

dataframe['name'].value_counts().idxmax()
Run Code Online (Sandbox Code Playgroud)

但它只返回值:Alex即使Helen出现两次也是如此.

WeN*_*Ben 34

通过使用 mode

df.name.mode()
Out[712]: 
0     alex
1    helen
dtype: object
Run Code Online (Sandbox Code Playgroud)

  • @Vaishali 是的,来自 scipy.mode ,它将返回模式和计数,对于 pd.mode,它返回值:-) (2认同)

小智 13

它将给出前五个最常见的名称:

df['name'].value_counts().nlargest(5)
Run Code Online (Sandbox Code Playgroud)


小智 11

使用:

df['name'].mode()
Run Code Online (Sandbox Code Playgroud)

或者

df['name'].value_counts().idxmax()
Run Code Online (Sandbox Code Playgroud)


小智 7

您可以这样尝试argmax

dataframe['name'].value_counts().argmax() Out[13]: 'alex'

value_counts返回的计数的对象pandas.core.series.Series,并argmax可以用来实现最大价值的关键。

  • 只是一个小错字更正:不是“idmax”,而是“idxmax” (3认同)
  • argmax不推荐用于idmax。 (2认同)

小智 7

您可以使用它来获得完美计数,它计算特定列的模式

df['name'].value_counts()
Run Code Online (Sandbox Code Playgroud)


Jar*_*ber 7

要获得n最频繁的值,只需将其子集.value_counts()并获取索引:

# get top 10 most frequent names
n = 10
dataframe['name'].value_counts()[:n].index.tolist()
Run Code Online (Sandbox Code Playgroud)

  • 返回的数据结构将在索引中存储“name”值,并将它们各自的计数存储为值。因此,如果您不使用索引,您将获得最频繁计数的列表,而不是关联的“名称”。 (2认同)

Tai*_*aie 7

df['name'].value_counts()[:5].sort_values(ascending=False)
Run Code Online (Sandbox Code Playgroud)

value_counts返回的计数对象pandas.core.series.Series,并sort_values(ascending=False)会得到你的最高值第一。


piR*_*red 6

不明显,但速度很快

f, u = pd.factorize(df.name.values)
counts = np.bincount(f)
u[counts == counts.max()]

array(['alex', 'helen'], dtype=object)
Run Code Online (Sandbox Code Playgroud)


pau*_*ult 5

这是一种方法:

df['name'].value_counts()[df['name'].value_counts() == df['name'].value_counts().max()]
Run Code Online (Sandbox Code Playgroud)

打印:

helen    2
alex     2
Name: name, dtype: int64
Run Code Online (Sandbox Code Playgroud)


Nao*_*man 5

获得前 5 名:

dataframe['name'].value_counts()[0:5]
Run Code Online (Sandbox Code Playgroud)

  • 我其实很喜欢这个答案,但有一个问题。这样做只会返回频率,而不是标签。通过使用 ```dataframe['name'].value_counts().keys()[0:5]``` 来解决这个问题。 (2认同)

小智 5

只需使用这个..

dataframe['name'].value_counts().nlargest(n)
Run Code Online (Sandbox Code Playgroud)

最大和最小频率的函数是:

  • nlargest()对于最常见的“n”值
  • nsmallest()对于最不频繁的“n”值