id|order_id|order_no|order_status|remark|handle_time|create_time|update_time
11237|3942|2018050307542800005985|新建订单||20180503075428|2018/5/3 07:54:28|2018/5/3 07:54:28
11238|3943|2018050307591600005986|新建订单||20180503075916|2018/5/3 07:59:16|2018/5/3 07:59:16
11239|3943|2018050307591600005986|新建订单||20180503082115|2018/5/3 08:21:15|2018/5/3 08:21:15
11240|3943|2018050307591600005986|新建订单||20180503083204|2018/5/3 08:32:04|2018/5/3 08:32:04
11241|3941|2018050308564400005991|新建订单||20180503085644|2018/5/3 08:56:02|2018/5/3 08:56:44
11242|3941|2018050222320800001084|初审成功||20180503085802|2018/5/3 08:58:02|2018/5/3 08:58:02
11243|3941|2018050222320800001084|审核成功||20180503085821|2018/5/3 08:59:21|2018/5/3 08:58:21
11244|3945|2018050309152000005993|新建订单||20180503091520|2018/5/3 09:15:21|2018/5/3 09:15:21
以上是我的txt文件中的数据。它包含股票交易的订单信息。
我想为每个唯一的order_id计算create_time列的时差。我如何用熊猫做到这一点?
例如order_id 3941,有三个条目。 create_time与第一个条目的差异为2分钟,与第二个条目的差异为1分钟。
最终输出如下所示:
order_id,stage1_time,stage2_time,...
3941,2,1,...
抱歉我的英语不好。
答案 0 :(得分:0)
我想我明白你在问什么。您只想拥有一个新的数据框来计算每个唯一订单ID的三个不同条目之间的时差?
所以,我首先创建数据框:
data = [
[11238,3943,201805030759165986,'新建订单',20180503075916,'2018/5/3 07:59:16','2018/5/3 07:59:16'],
[11239,3943,201805030759165986,'新建订单',20180503082115,'2018/5/3 08:21:15','2018/5/3 08:21:15'],
[11240,3943,201805030759165986,'新建订单',20180503083204,'2018/5/3 08:32:04','2018/5/3 08:32:04'],
[11241,3941,201805030856445991,'新建订单',20180503085644,'2018/5/3 08:56:02','2018/5/3 08:56:44'],
[11242,3941,201805022232081084,'初审成功',20180503085802,'2018/5/3 08:58:02','2018/5/3 08:58:02'],
[11243,3941,201805022232081084,'审核成功',20180503085821,'2018/5/3 08:59:21','2018/5/3 08:58:21']
]
df = pd.DataFrame(data, columns=['id','order_id','order_no','order_status','handle_time','create_time','update_time'])
df.loc[:, 'create_time'] = pd.to_datetime(df.loc[:, 'create_time'])
按order_id排序值,然后按create_time:
排序df = df.sort_values(by=['order_id', 'create_time'])
接下来,我按订单ID分组并选择第1,第2和第3个条目:
first_df = df.groupby('order_id').nth(0)
second_df = df.groupby('order_id').nth(1)
third_df = df.groupby('order_id').nth(2)
从第二阶段减去第一阶段以获得第一阶段,并从第三阶段减去第二阶段以获得第二阶段。然后将它们组合成输出数据帧:
stage_two = third_df.loc[:, 'create_time'] - second_df.loc[:, 'create_time']
stage_one = second_df.loc[:, 'create_time'] - first_df.loc[:, 'create_time']
stages = pd.concat([stage_one, stage_two], axis=1, keys=['stage_one', 'stage_two'])
print(stages)
输出如下:
stage_one stage_two
order_id
3941 00:02:00 00:01:19
3943 00:21:59 00:10:49