【问题标题】:find and select the most frequent data of column in pandas DataFrame在pandas DataFrame中查找并​​选择最频繁的列数据
【发布时间】:2014-01-13 01:40:22
【问题描述】:

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

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 个月没有考虑最频繁的数据?

我是不是做错了什么?

想知道每个月最常见的数据吗?

【问题讨论】:

  • 如果多个方向在给定月份中具有相同(最大)计数,您希望发生什么?

标签: python pandas dataframe


【解决方案1】:

这并不像(应该)那么简单。

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

from scipy.stats.mstats import mode

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

f = lambda x: mode(x, axis=None)[0]

现在,使用 apply(f) 代替 value_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 的 mode 不适用于字符串。对于您的字符串数据,您需要定义一个更通用的模式函数。 This answer 应该可以解决问题。

【讨论】:

    【解决方案2】:
    1. 对于整个数据框,您可以使用:

      dataframe.mode()
      
    2. 对于特定列:

      dataframe.mode()['Column'][0]
      

    第二种情况在估算值时更有用。

    【讨论】:

      【解决方案3】:

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

      这里是the docs

      编辑:对于值:

      DataFrame.mode()[0]
      

      【讨论】:

        猜你喜欢
        • 2020-11-23
        • 2014-03-24
        • 2011-03-07
        • 2015-08-27
        • 2021-04-21
        • 2022-11-25
        • 2021-12-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多