首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找并选择pandas DataFrame中最常用的列数据

查找并选择pandas DataFrame中最常用的列数据
EN

Stack Overflow用户
提问于 2014-01-13 09:40:22
回答 3查看 41.5K关注 0票数 7

我有一个包含以下列的数据帧:

代码语言:javascript
复制
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

该栏有一年中每个月的每日风向记录。我正在尝试获取每个月的主要方向。要实现这一点,请选择当月最常重复的数据:

代码语言:javascript
复制
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

在运行以下代码行时

代码语言:javascript
复制
wind_moda=file['DirViento'].groupby(lambda x: x.month).agg(lambda x: stats.mode(x)[0][0])

应该会得到这样的东西

代码语言:javascript
复制
     1  ENE    
     2  ENE    
     3  ENE  
     4  ENE
     6  ENE
     7  ENE    
     8  ENE    
     9  ENE
    10  ENE  
    11  ENE
    12  ENE  

但我得到了以下信息:

代码语言:javascript
复制
 1          E  
 2        ENE  
 3        ENE  
 4        ENE  
 6          E  
 7        ENE  
 8        ENE  
 9          E  
 10         E  
 11       ENE  
 12       ENE  

为什么在12个月中有4个月没有考虑到最频繁的数据?

我做错了什么吗?

有没有办法每月获得最常见的数据?

EN

回答 3

Stack Overflow用户

发布于 2015-03-17 22:12:50

Pandas 0.15.2有一个DataFrame.mode()方法。它可能对像我一样寻找这个的人有用。

这里是the docs

编辑:对于值:

代码语言:javascript
复制
DataFrame.mode()[0]
票数 11
EN

Stack Overflow用户

发布于 2014-01-13 11:34:16

这并不像它可能(应该)那样简单。

正如您可能知道的,最常见的值的统计术语是“mode”。Numpy没有内置的函数,但scipy有。像这样导入它:

代码语言:javascript
复制
from scipy.stats.mstats import mode

它不仅仅返回最常用的值as you can read about in the docs,因此可以方便地定义一个使用mode的函数来只获取最常用的值。

代码语言:javascript
复制
f = lambda x: mode(x, axis=None)[0]

现在,使用apply(f)而不是value_counts()。下面是一个示例:

代码语言:javascript
复制
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的mode不能处理字符串。对于字符串数据,您需要定义一个更通用的模式函数。This answer应该可以做到这一点。

票数 5
EN

Stack Overflow用户

发布于 2018-09-27 16:08:29

对于整个数据帧,您可以使用

dataframe.mode()

  • For特定列:

dataframe.mode()'Column'

第二种情况在输入值时更有用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21082671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档