熊猫数据帧中 mode() 的不舒服输出



我有一个包含几列(特征(的数据帧。

>>> print(df)
   col1  col2
a     1     1
b     2     2
c     3     3
d     3     2

我想计算其中一个的模式。这是发生的情况:

>>> print(df['col1'].mode())
0    3
dtype: int64

我想简单地输出值3.如果您认为以下非常相似的代码正在工作,那么这种行为非常奇怪:

>>> print(df['col1'].mean())
2.25

所以有两个问题:为什么会这样?如何获得平均值的纯模式值?

因为 Series.mode(( 可以返回多个值:

请考虑以下 DF:

In [77]: df
Out[77]:
   col1  col2
a     1     1
b     2     2
c     3     3
d     3     2
e     2     3
In [78]: df['col1'].mode()
Out[78]:
0    2
1    3
dtype: int64

从文档字符串:

如果至少发生 2 次,则为空。 始终返回系列 即使只有一个值。

如果要选择第一个值:

In [83]: df['col1'].mode().iloc[0]
Out[83]: 2
In [84]: df['col1'].mode()[0]
Out[84]: 2

我同意这太麻烦了

df['col1'].mode((.iloc[0].values[0]

一个系列可以有一个 mean((,但一个系列可以有多个 mode((

喜欢

<2,2,3,3,3,4,4,4,5,6,7,8>其模式2,3,4。

输出必须编制索引

mode()将返回与最常见值相关的所有值。

为了支持该功能,它必须返回一个集合,该集合采用dataFrame或系列的形式。

例如,如果您有一个系列:

[2, 2, 3, 3, 5, 5, 6]

然后,最常见的值出现两次。结果将是系列[2, 3, 5],因为每个序列都发生两次。

如果要将其折叠为单个值,可以访问第一个值,计算max()min()或任何对您的应用程序最有意义的值。

最新更新