大 pandas 因具体情况而产生的日间时差 [英] Time difference in day based on specific condition in pandas

查看:0
本文介绍了大 pandas 因具体情况而产生的日间时差的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个数据框,如下所示

Tenancy_ID  Unit_ID           Unit_Create_Date           Tenancy_Start_Date
1           A                 2012-09-06 13:34:15        2012-09-08 11:34:14
2           A                 2012-09-06 13:34:15        2013-04-08 11:34:13
3           B                 2012-09-01 11:34:15        2012-09-21 11:34:15
4           B                 2012-09-01 11:34:15        2012-09-11 11:34:13
5           C                 2012-06-02 13:34:15        2012-09-08 11:34:16
3           C                 2012-06-02 13:34:15        2012-06-21 11:34:15
5           A                 2012-09-09 10:32:17        2012-11-08 11:34:18

我想了解每个单元从First Unit_Create_Date到First Tenancy_Start_Date之间的时间差(以天为单位)。

预期输出:

Unit_ID           Time_Difference_in_Days
A                 2
B                 10
C                 19

步骤:

对于单位ID=A,

有2012-09-06 13:34:15和2012-09-09 10:32:17两个UNIT_CREATE_DATE,其中最早(第一个)的是2012-09-06 13:34:15。

同样,UNIT_ID=A有三个Tenancy_Start_Date,如2012-09-08 11:34:14、2013-04-08 11:34:13和2012-11-08 11:34:18,其中最早的是2012-09-08 11:34:14。

因此2012-09-08 11:34:14和2012-09-06 13:34:15之间的天数差为2。

推荐答案

将列转换为.dt.date后使用groupbymin尝试

m = (df.assign(Unit_Create_Date = df['Unit_Create_Date'].dt.date
       ,Tenancy_Start_Date=df['Tenancy_Start_Date'].dt.date)
      .groupby('Unit_ID')['Unit_Create_Date','Tenancy_Start_Date'].min())

final = (m['Tenancy_Start_Date'].sub(m['Unit_Create_Date'])
        .dt.days.to_frame('Time_Difference_in_Days').reset_index())

  Unit_ID  Time_Difference_in_Days
0       A                        2
1       B                       10
2       C                       19

注意:如果DateTime列是dtype对象,请首先转换为DateTime。

这篇关于大 pandas 因具体情况而产生的日间时差的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆