Pandas groupby создает много разных вычисляемых столбцов - PullRequest
0 голосов
/ 17 апреля 2019

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

   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

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

Я могу получить это индивидуально, выполнив одно групповое задание для каждой метрики (или используя 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

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

1 Ответ

4 голосов
/ 17 апреля 2019

Проверьте с помощью 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...