Pandas groupby создает много разных вычисляемых столбцов

#python #python-3.x #pandas #pandas-groupby

#python #python-3.x #pandas #pandas-groupby

Вопрос:

У меня следующая проблема: задан фрейм данных с информацией об идентификаторах:

    id  items       date
0   1      3 2019-01-22
1   1      1 2018-05-01
2   1      2 2019-03-31
3   2      2 2018-12-12
4   2      1 2018-11-26
5   2      3 2018-05-16
6   3      1 2019-01-03
7   3      4 2018-11-22
8   3      3 2018-09-11
 

Я хочу сгруппировать по «идентификатору», но мне нужны различные показатели — последняя дата, самая ранняя дата, общая сумма элементов, общая сумма элементов с начала года и т.д…

Я могу получить это индивидуально, выполнив один groupby для каждой метрики (или используя agg для получения двух разных столбцов), а затем присоединив его к первому groupby — мне было интересно, существует ли agg-подобный метод, чтобы новые столбцы создавались на основе «элементов» и «даты». Результатом будет что-то вроде:

     items latest date earliest_date  items_this_year
id                                                  
1       6  2019-03-31    2018-02-01                5
2       6  2018-12-12    2018-05-16                0
3       8  2019-01-03    2018-09-11                1
 

Существует ли функция pandas, которая позволяет нам устанавливать функцию для каждого столбца или что-то в этом роде?

Ответ №1:

Проверьте с groupby помощью agg , а для элемента в 2019 году вам все равно может потребоваться сделать это отдельно

 s2=df.loc[df.date.dt.year==2019].groupby('id').items.sum()
s=df.groupby('id').agg({'items':'sum','date':['max','min']})
s.columns=s.columns.map('_'.join)
s['Item_2019']=s2
s.reset_index(inplace=True)
s
Out[718]: 
   id  items_sum   date_max   date_min  Item_2019
0   1          6 2019-03-31 2018-05-01        5.0
1   2          6 2018-12-12 2018-05-16        NaN
2   3          8 2019-01-03 2018-09-11        1.0
 

Комментарии:

1. Спасибо! Список в agg — это, вероятно, то, что я искал, не понимал, что это возможно