Python 比较包含日期和时间的数据框中的两列,并在另一列中给出差异
我有这样一个数据框:Python 比较包含日期和时间的数据框中的两列,并在另一列中给出差异,python,python-3.x,pandas,dataframe,compare,Python,Python 3.x,Pandas,Dataframe,Compare,我有这样一个数据框: datetime1 datetime2 0 2021-05-09 19:52:14 2021-05-09 20:52:14 1 2021-05-09 19:52:14 2021-05-09 21:52:14 我想比较它们并创建一个新列,其中包含它们之间的差异: 理想的输出如下所示: datetime1 datetim
datetime1 datetime2
0 2021-05-09 19:52:14 2021-05-09 20:52:14
1 2021-05-09 19:52:14 2021-05-09 21:52:14
我想比较它们并创建一个新列,其中包含它们之间的差异:
理想的输出如下所示:
datetime1 datetime2 Difference in H:m:s
0 2021-05-09 19:52:14 2021-05-09 20:52:14 01:00:00
1 2021-05-09 19:52:14 2021-05-09 21:52:14 02:00:00
编辑:
@Andrej当我在datetime1和DateTime2中都有时间戳时,你给我的解决方案非常有效。如果我有一个像下面这样的df,它是失败的,因为它没有什么可比较的
df1:
df2(理想输出):
在一个真实的场景中,我有一个例子,我在datetime1和datetime2中没有值,或者我在datatime1中有值,但在datatime2中没有值,所以如果datetime1和datetime2中没有时间戳,是否有可能在“差分”列中获取NaN,如果datetime1中只有时间戳,则获取与datetime相比的差分。now()并将其放在另一列中。尝试:
def strfdelta(tdelta,fmt):
d={“天”:tdelta.days}
d[“小时”],rem=divmod(tdelta.seconds,3600)
d[“分”]、d[“秒”]=divmod(rem,60)
返回格式(**d)
#如果datetime1/datetime2还不是datetime,请将“.应用于”\u datetime()”:
df[“datetime1”]=pd.to_datetime(df[“datetime1”])
df[“datetime2”]=pd.to_datetime(df[“datetime2”])
df[“H:m:s中的差异”]=df.apply(
lambda x:strfdelta(
x[“datetime2”]-x[“datetime1”],
“{小时:02d}:{分钟:02d}:{秒:02d}”,
),
轴=1,
)
打印(df)
印刷品:
H:m:s中的日期时间1日期时间2差异
0 2021-05-09 19:52:14 2021-05-09 20:52:14 01:00:00
1 2021-05-09 19:52:14 2021-05-09 21:52:14 02:00:00
编辑:要处理
NaN
s:
#如果datetime1/datetime2还不是datetime,请将`.应用于_datetime()`:
df[“datetime1”]=pd.to_datetime(df[“datetime1”])
df[“datetime2”]=pd.to_datetime(df[“datetime2”])
df[“H:m:s中的差异”]=df.apply(
lambda x:strfdelta(
x[“datetime2”]-x[“datetime1”],
“{小时:02d}:{分钟:02d}:{秒:02d}”,
)
如果pd.notna(x[“datetime1”])和pd.notna(x[“datetime2”])
否则np.nan,
轴=1,
)
df[“与datetime.now()比较]=df.apply(
lambda x:strfdelta(
pd.Timestamp.now()-x[“datetime1”],
“{小时:02d}:{分钟:02d}:{秒:02d}”,
)
如果pd.notna(x[“datetime1”])和pd.isna(x[“datetime2”])
否则np.nan,
轴=1,
)
打印(df)
印刷品:
与datetime.now()相比,H:m:s中的datetime1 datetime2差异
2021-05-09 19:52:14 2021-05-09 20:52:14 01:00:00南
2021-05-09 19:52:14 2021-05-09 21:52:14 02:00:00南
2纳纳南
3 2021-05-09 16:30:14纳南03:00:20
4纳纳南
5 2021-05-09 12:30:14 2021-05-09 14:30:14 02:00:00南
非常感谢@AndrejHey@AndrejKesely,我编辑了我的问题,因为我有一些错误,你能检查一下吗?@user14073111我已经更新了我的答案。非常感谢manHey@AndrejKesely,我有一个问题,例如datetime2和datetime1之间的差异超过24小时,但没有正确获得差异,例如,如果差异为25:00:00。打印的时候好像只有01:00:00?你知道为什么吗?
datetime1 datetime2
0 2021-05-09 19:52:14 2021-05-09 20:52:14
1 2021-05-09 19:52:14 2021-05-09 21:52:14
2 NaN NaN
3 2021-05-09 16:30:14 NaN
4 NaN NaN
5 2021-05-09 12:30:14 2021-05-09 14:30:14
datetime1 datetime2 Difference in H:m:s Compared with datetime.now()
0 2021-05-09 19:52:14 2021-05-09 20:52:14 01:00:00 NaN
1 2021-05-09 19:52:14 2021-05-09 21:52:14 02:00:00 NaN
2 NaN NaN NaN NaN
3 2021-05-09 16:30:14 NaN NaN e.g(04:00:00)
4 NaN NaN NaN NaN
5 2021-05-09 12:30:14 2021-05-09 14:30:14 02:00:00 NaN