Python 查找并选择DataFrame中列的最频繁数据
我有一个dataframe,其中包含以下列:Python 查找并选择DataFrame中列的最频繁数据,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个dataframe,其中包含以下列: file['DirViento'] Fecha 2011-01-01 ENE 2011-01-02 ENE 2011-01-03 ENE 2011-01-04 NNE 2011-01-05 ENE 2011-01-06 ENE 2011-01-07 ENE 2011-01-08 ENE 2011-01-09 NNE 2011-01-10 ENE 2011-01-11 ENE 201
file['DirViento']
Fecha
2011-01-01 ENE
2011-01-02 ENE
2011-01-03 ENE
2011-01-04 NNE
2011-01-05 ENE
2011-01-06 ENE
2011-01-07 ENE
2011-01-08 ENE
2011-01-09 NNE
2011-01-10 ENE
2011-01-11 ENE
2011-01-12 ENE
2011-01-13 ESE
2011-01-14 ENE
2011-01-15 ENE
...
2011-12-17 ENE
2011-12-18 ENE
2011-12-19 ENE
2011-12-20 ENE
2011-12-21 ENE
2011-12-22 ENE
2011-12-23 ENE
2011-12-24 ENE
2011-12-25 ENE
2011-12-26 ESE
2011-12-27 ENE
2011-12-28 NE
2011-12-29 ENE
2011-12-30 NNE
2011-12-31 ENE
Name: DirViento, Length: 290, dtype: object
该栏每天记录一年中每个月的风向。我试着为每个月找到主导方向。为此,请选择当月最常重复的数据:
file['DirViento'].groupby(lambda x: x.month).value_counts()
1 ENE 23
NNE 6
E 1
ESE 1
2 ENE 21
NNO 3
NNE 2
NE 1
3 ENE 21
OSO 1
ESE 1
SSE 1
4 ENE 21
NNE 2
ESE 1
NNO 1
6 ENE 15
ESE 2
SSE 2
ONO 1
E 1
7 ENE 22
ONO 1
OSO 1
NE 1
NNE 1
NNO 1
8 ENE 23
NNE 5
NE 1
ONO 1
ESE 1
9 ENE 17
NNE 7
ONO 2
NE 1
E 1
ESE 1
NNO 1
10 ENE 16
NNE 2
ESE 2
NNO 2
ONO 1
NE 1
E 1
11 ENE 13
NNE 2
ESE 2
ONO 1
12 ENE 26
NNE 3
NE 1
ESE 1
Length: 54, dtype: int64
当运行以下代码行时
wind_moda=file['DirViento'].groupby(lambda x: x.month).agg(lambda x: stats.mode(x)[0][0])
我们应该买这样的东西
1 ENE
2 ENE
3 ENE
4 ENE
6 ENE
7 ENE
8 ENE
9 ENE
10 ENE
11 ENE
12 ENE
但我得到了以下信息:
1 E
2 ENE
3 ENE
4 ENE
6 E
7 ENE
8 ENE
9 E
10 E
11 ENE
12 ENE
为什么在12个月中的4个月没有考虑最频繁的数据
我做错什么了吗
有没有想法每月获取最常见的数据?这并不像可能(应该)那样简单 您可能知道,统计术语中最常用的值是“mode”。Numpy没有内置函数,但scipy有。按如下方式导入:
from scipy.stats.mstats import mode
它不仅仅返回最常见的值,因此定义一个使用模式
仅获取最常见值的函数非常方便
f = lambda x: mode(x, axis=None)[0]
现在,使用apply(f)
代替value\u counts()
。以下是一个例子:
In [20]: DataFrame([1,1,2,2,2,3], index=[1,1,1,2,2,2]).groupby(level=0).apply(f)
Out[20]:
1 1.0
2 2.0
dtype: object
更新:Scipy的
模式不适用于字符串。对于字符串数据,需要定义一个更通用的模式函数。应该可以。熊猫0.15.2有一个DataFrame.mode()
方法。它可能对像我这样寻找这个的人有用
给你
编辑:对于值:
DataFrame.mode()[0]
对于整个数据帧,您可以使用:
dataframe.mode()
对于特定列:
dataframe.mode()['Column'][0]
第二种情况在输入值时更有用。如果给定月份内有多个方向具有相同(最大)计数,您希望发生什么?