熊猫分组创建许多不同的计算列

时间:2019-04-17 14:34:25

标签: python python-3.x pandas pandas-groupby

我遇到以下问题:给定一个有关ID信息的数据框:

   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

我想按“ id”分组,但是我需要各种指标-最新日期,最早日期,项目总数,自年初以来的项目总数等等。

我可以通过对每个指标执行一个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 个答案:

答案 0 :(得分:4)

使用groupby + agg进行检查,对于2019年的Item,您可能仍需要单独进行

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