#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 — это, вероятно, то, что я искал, не понимал, что это возможно