Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 比较包含日期和时间的数据框中的两列,并在另一列中给出差异_Python_Python 3.x_Pandas_Dataframe_Compare - Fatal编程技术网

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