2016-08-20 6 views
0

ich den Code nicht verstehen kann:Pandas GROUPBY mit einem Lambda-Parameter

pivot = pd.pivot_table(subset, values='count', rows=['date'], cols=['sample'], fill_value=0) 

by = lambda x: lambda y: getattr(y, x) 

grouped = pivot.groupby([by('year'),by('month')]).sum() 

subset im Code ist ein Datenrahmen, die haben eine Spalte "Datum" genannt (eg2013-02-04 6.20: 49,634244), und haben keine Spalte mit dem Namen "Jahr" und "Monat".

, wo ich Schwierigkeiten haben, mit

  • Ich kann nicht das "Jahr" und "Monat" herauszufinden, in:

    grouped = pivot.groupby([by('year'),by('month')]).sum() 
    
  • Was ist die Bedeutung von

Was ich getan habe:

  • In den Pandas pandas document sagt: die erste parame des pandas.DataFrame.groupby

    sein kann

    von: Mapping-Funktion/Liste Funktionen, dict, Serie oder Tupel/

  • von = Lambda X: Lamm da y: getattr (y, x)

Mittel ('Bar') gibt eine Funktion, die das Attribut 'Bar' von einem Objekt zurückgibt

+0

Können Sie Beispieldaten veröffentlichen Satz für die 'subset' DF? Wenn Sie zum Beispiel 'year' und' month' __values__ in der 'subset ['sample']' Spalte haben, dann haben Sie solche Spalten nach dem Pivotieren ... – MaxU

+1

[Wie man gute reproduzierbare Pandas Beispiele macht] (http://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples) – MaxU

Antwort

1

Wenn eine aufrufbare zu übergeben groupby, heißt es auf dem DataFrame Index, so dass dieser Code nach Jahr und Monat eines datumsgleichen Index gruppiert ist.

In [55]: df = pd.DataFrame({'a': 1.0}, 
          index=pd.date_range('2014-01-01', periods=13, freq='M')) 

In [56]: df.groupby([by('year'), by('month')]).sum() 
Out[56]: 
      a 
2014 1 1.0 
    2 1.0 
    3 1.0 
    4 1.0 
    5 1.0 
    6 1.0 
    7 1.0 
    8 1.0 
    9 1.0 
    10 1.0 
    11 1.0 
    12 1.0 
2015 1 1.0 

Mehr explizit

In [57]: df.groupby([df.index.year, df.index.month]).sum() 
Out[57]: 
      a 
2014 1 1.0 
    2 1.0 
    3 1.0 
    4 1.0 
    5 1.0 
    6 1.0 
    7 1.0 
    8 1.0 
    9 1.0 
    10 1.0 
    11 1.0 
    12 1.0 
2015 1 1.0