[英]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個沒有考慮到最常見的數據?
難道我做錯了什么 ?
有沒有想過每月獲得最常見的數據?
這並不像(應該)那樣簡單。
您可能知道,最常見的值的統計術語是“模式”。 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
對於整個數據幀,您可以使用:
dataframe.mode()
對於特定列:
dataframe.mode()['Column'][0]
第二種情況在推算價值方面更有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.