大 pandas 因具体情况而产生的日间时差 [英] Time difference in day based on specific condition in pandas
本文介绍了大 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
后使用groupby
和min
尝试
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屋!
查看全文