панды групповой с лямбда-параметром

python pandas lambda

1175 просмотра

1 ответ

Я не могу понять код:

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, который имеет столбец с именем «date» (например, 2013-02-04 06: 20: 49.634244) и не имеет столбца с именем «year» и «month».

где у меня проблемы с

  • Я не могу понять, "год" и "месяц" в:

    grouped = pivot.groupby([by('year'),by('month')]).sum()
    
  • Что означает

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

Что я сделал:

  • В документе «Панды панды» говорится: первый параметр pandas.DataFrame.groupby может быть

    по: функция отображения / список функций, dict, Series или кортеж /

  • by = лямбда x: лямбда y: getattr (y, x)

средство by ('bar') возвращает функцию, которая возвращает атрибут 'bar' из объекта

Автор: zhql0907 Источник Размещён: 08.11.2019 11:12

Ответы (1)


1 плюс

Решение

Если передается вызываемый объект groupby, он вызывается по DataFrameиндексу, поэтому этот код группируется по году и месяцу индекса даты и времени.

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
Автор: chrisb Размещён: 20.08.2016 04:46
Вопросы из категории :
32x32