我有一个如下数据框:
id_cliente id_ordine data_ordine id_medium
0 madinside IML-0042758 2016-08-23 1190408
1 lisbeth19 IML-0071225 2017-02-26 1205650
2 lisbeth19 IML-0072944 2017-03-15 1207056
3 lisbeth19 IML-0077676 2017-05-12 1211395
4 lisbeth19 IML-0077676 2017-05-12 1207056
5 madinside IML-0094979 2017-09-29 1222195
6 lisbeth19 IML-0099675 2017-11-15 1211446
7 lisbeth19 IML-0099690 2017-11-15 1225212
8 lisbeth19 IML-0101439 2017-12-02 1226511
9 lisbeth19 IML-0109883 2018-03-14 1226511
我想添加三列:
第一列可以命名为“每个客户的订单数量” ,并且应该是同一客户下达的订单的进度。
因此订单 IML-0042758 应该为1, IML-0071225 应该为1, IML-0072944 应该为2, IML-0077676 应该为3, IML-0094979 应该为2,依此类推。
第二列可以命名为“同一位客户的第一笔订单和第n笔订单之间的天数” ,并显示“ data_ordine” 的区别(日期时间列)在同一客户的不同订单之间进行。
因此前6行的值将为:0(2016-08-23-2016-08-23),0(2017-02-26-2017-02-26),17(2017-03-15-2017 -02-26),75(2017-05-12-2017-02-26),75(2017-05-12-2017-02-26),402(2017-09-29-2017-02-26) 。
第三列可以命名为“同一id_medium的第一和第n阶之间的天数” ,并显示“ data_ordine” 的区别(日期时间列)之间,每个 id_medium 。
因此前6行的值将为:0(2016-08-23-2016-08-23),0(2017-02-26-2017-02-26),0(2017-03-15-2017 -03-15),0(2017-05-12-2017-05-12),58(2017-05-12-2017-03-15),因为订购了“ 1207056” 第二次),0(2017-09-29-2017-09-29)。
最后,我想计算一个客户平均要花多长时间才能完成第二个订单,第三个订单,第四个订单等等。
以及客户对同一个id_medium进行第二,第三(等)订单的平均时间。
答案 0 :(得分:2)
首先转换为datetime
和sort
,以使计算可靠。
groupby
+ ngroup
来标记每个订单,然后我们从每个人中减去最小值,以便他们都从1开始。groupby
+ transform
获取每个客户的第一个日期,然后减去id_medium
添加到分组中df['data_ordine'] = pd.to_datetime(df['data_ordine'])
df = df.sort_values('data_ordine')
df['Num_ords'] = df.groupby(['id_cliente', 'id_ordine']).ngroup()
df['Num_ords'] = df.Num_ords - df.groupby(['id_cliente']).Num_ords.transform('min')+1
df['days_bet'] = (df.data_ordine -df.groupby('id_cliente').data_ordine.transform('min')).dt.days
df['days_bet_id'] = (df.data_ordine - df.groupby(['id_cliente', 'id_medium']).data_ordine.transform('min')).dt.days
id_cliente id_ordine data_ordine id_medium Num_ords days_bet days_bet_id
0 madinside IML-0042758 2016-08-23 1190408 1 0 0
1 lisbeth19 IML-0071225 2017-02-26 1205650 1 0 0
2 lisbeth19 IML-0072944 2017-03-15 1207056 2 17 0
3 lisbeth19 IML-0077676 2017-05-12 1211395 3 75 0
4 lisbeth19 IML-0077676 2017-05-12 1207056 3 75 58
5 madinside IML-0094979 2017-09-29 1222195 2 402 0
6 lisbeth19 IML-0099675 2017-11-15 1211446 4 262 0
7 lisbeth19 IML-0099690 2017-11-15 1225212 5 262 0
8 lisbeth19 IML-0101439 2017-12-02 1226511 6 279 0
9 lisbeth19 IML-0109883 2018-03-14 1226511 7 381 102