如何获取最近的订单日期?

时间:2019-04-16 14:02:03

标签: python-3.x pandas data-science

我正在做一个外部练习,其中有一组客户购买的数据。我有以下几列:customer_id,日期,性别,值(购买值)。练习的一部分是创建一个名为most_recent_order_date的新列。我应该如何去实现呢?我浏览了多个堆栈溢出页面,但没有成功。我尝试了"df['most_recent_order_date']=df.sort_values('customer_id',ascending=False)['date']",但这只会按升序返回所有购买的日期。我需要特定于customer_id,因为customer_id可能有多次购买。先谢谢了。 *练习的另一部分是创建一个order_count列,即最后一列。

data= pd.read_csv('screening_exercise_orders_v201810.csv')
df=pd.DataFrame(data)

df['most_recent_order_date']= 'default value'
df['order_count']= 'default value'

df['date'] = pd.to_datetime(df['date'])
df['most_recent_order_date']=df.sort_values('customer_id',ascending=False)['date']
df['order_count']= df.groupby(['customer_id']).transform('count')
df.head(10)

我希望这样:

0   1000    0   2017-01-01 00:11:31 198.50  1   2017-02-10 00:11:   1
1   1001    0   2017-01-01 00:29:56 338.00  1   2017-11-01 00:29:56 1
2   1002    1   2017-01-01 01:30:31 733.00  1   2017-06-11 01:30:31 3
3   1003    1   2017-01-01 01:34:22 772.00  1   2017-05-14 01:34:22 4
4   1004    0   2017-01-01 03:11:54 508.00  1   2017-01-01 03:11:54 1

但是我真正得到的是:

0   1000    0   2017-01-01 00:11:31 198.50  1   2017-01-01 00:11:31 1
1   1001    0   2017-01-01 00:29:56 338.00  1   2017-01-01 00:29:56 1
2   1002    1   2017-01-01 01:30:31 733.00  1   2017-01-01 01:30:31 3
3   1003    1   2017-01-01 01:34:22 772.00  1   2017-01-01 01:34:22 4
4   1004    0   2017-01-01 03:11:54 508.00  1   2017-01-01 03:11:54 1

1 个答案:

答案 0 :(得分:0)

对于最近的日期,请将groupby.transformmax一起使用:

df['date'] = pd.to_datetime(df['date'])
df['most_recent_date'] = df.groupby(['customer_id'])['date'].transform('max')

对于计数,请使用groupby.cumcount

df['order_count'] = df.groupby(['customer_id']).cumcount().add(1)