我遇到以下问题:给定一个有关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函数可以让我们为每列或某物设置一个函数?
答案 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