簡體   English   中英

帶有lambda參數的pandas groupby

[英]pandas groupby with a 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是一個DataFrame,它具有一個名為“日期”的列(例如,2013-02-04 06:20:49.634244),而沒有一個名為“年”和“月”的列。

我有麻煩的地方

  • 我無法確定“年”和“月”的形式:

     grouped = pivot.groupby([by('year'),by('month')]).sum() 
  • 是什么意思

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

我做了什么:

  • 在pandas中pandas文檔說:pandas.DataFrame.groupby的第一個參數可以是

    作者:映射函數/函數列表,字典,系列或元組/

  • 由= lambda x:lambda y:getattr(y,x)

表示by('bar')返回一個函數,該函數從對象返回屬性'bar'

如果將callable傳遞給groupby ,則會在DataFrame的索引上調用它,因此此代碼DataFrame datetimelike索引的年和月進行分組。

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

更明確地

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

暫無
暫無

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

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