簡體   English   中英

在pandas DataFrame中查找並​​選擇最常用的列數據

[英]find and select the most frequent data of column in pandas 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
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個沒有考慮到最常見的數據?

難道我做錯了什么 ?

有沒有想過每月獲得最常見的數據?

Pandas 0.15.2有一個DataFrame.mode()方法。 它可能對我這樣尋找這個的人有用。

這是文檔

編輯:對於價值:

DataFrame.mode()[0]

這並不像(應該)那樣簡單。

您可能知道,最常見的值的統計術語是“模式”。 Numpy沒有內置功能,但scipy確實如此。 像這樣導入:

from scipy.stats.mstats import mode

它不僅僅是返回最常見的值, 正如您可以在文檔中閱讀的那樣 ,因此定義一個使用mode來獲取最常見值的函數很方便。

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

現在,使用apply(f)代替value_counts() apply(f) 這是一個例子:

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不適用於字符串。 對於字符串數據,您需要定義更通用的模式函數。 這個答案可以解決問題

  1. 對於整個數據幀,您可以使用:

     dataframe.mode() 
  2. 對於特定列:

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

第二種情況在推算價值方面更有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM