如何计算成本时间

时间:2018-05-06 12:42:57

标签: python pandas dataframe

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,...

抱歉我的英语不好。

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