2014-01-13 7 views
5

Ich habe einen Datenrahmen mit der folgenden Spalte:finden und wählen Sie die am häufigsten Daten von Spalte 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 

Die Spalte für jeden Monat des Jahres täglich Aufzeichnungen Windrichtung hat. Ich versuche, die dominierende Richtung für jeden Monat zu bekommen. Um dies zu erreichen, wählen Sie die Daten am häufigsten im Laufe des Monats wiederholt:

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 

Wenn die folgende Codezeile ausgeführt

wind_moda=file['DirViento'].groupby(lambda x: x.month).agg(lambda x: stats.mode(x)[0][0]) 

Sollte bekommen so etwas wie dieses

 1 ENE  
    2 ENE  
    3 ENE 
    4 ENE 
    6 ENE 
    7 ENE  
    8 ENE  
    9 ENE 
    10 ENE 
    11 ENE 
    12 ENE 

Aber ich die folgenden:

1   E 
2  ENE 
3  ENE 
4  ENE 
6   E 
7  ENE 
8  ENE 
9   E 
10   E 
11  ENE 
12  ENE 

Warum in 4 der 12 Monate werden die häufigsten Daten nicht berücksichtigt?

Mache ich etwas falsch?

Irgendeine Idee, um die häufigsten Daten jeden Monat zu bekommen?

+0

Was möchten Sie passieren, wenn mehr als eine Richtung die gleiche (maximal) hat zählen in einem bestimmten Monat? – DSM

Antwort

3

Dies ist nicht so einfach wie es sein könnte (sollte sein).

Wie Sie wahrscheinlich wissen, ist der Statistik-Jargon für den gebräuchlichsten Wert der "Modus". Numpy hat dafür keine eingebaute Funktion, aber scipy tut es. Importieren Sie es in etwa so:

from scipy.stats.mstats import mode 

Es ist mehr als nur die gängigste Wert zurückgeben, as you can read about in the docs, so ist es zweckmäßig, eine Funktion zu definieren, die mode verwendet, um nur die häufigsten Wert.

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

Und nun, statt value_counts() verwenden apply(f). Hier ein Beispiel:

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 

Update: Scipy des mode funktioniert nicht mit Streichern. Für Ihre String-Daten müssen Sie eine allgemeinere Modusfunktion definieren. This answer sollte den Trick tun.

6

Pandas 0.15.2 hat eine Methode. Es könnte für jemanden nützlich sein, der danach sucht, wie ich war.

Hier sind the docs.

Edit: Für den Wert:

DataFrame.mode()[0] 
Verwandte Themen