从 'Datetime' 创建 'Time' 以比较不同日期的事件时间

Create 'Time' from 'Datetime' to compare event time from different days

总结 我有一个 csv 文件作为数据源,我正在将其加载到 pandas 数据框中。 它包含一个包含时间戳的日期时间列,并跨越多个月的历史记录,当有人对机器执行不同的扫描操作时自动创建。动作类型也记录在单独的列中:

Index Datetime Action
0 12/7/2021 16:39:46 a
1 16/6/2021 10:24:26 a
2 21/6/2021 12:43:35 b
3 11/6/2021 19:56:28 a
4 28/5/2021 14:28:47 b

问题 要绘制一种类型的热图并找出一天中什么时候聚集的动作,我想将时间戳与日期时间隔离开来,因为我并不真正关心日期。

Datetime 最初是一个对象,我使用 pd.to.datetime 将其转换为 datetime。 现在我可以使用以下方法将时间拆分到不同的列: df['Time'] = df['Timestamp'].dt.strftime('%H:%M')

但我的问题是,新数据类型又是一个对象,出于绘图原因,我想我必须再次转换它才能正确排序。

最终输出应该是上述热图,x 轴范围从 06:00 上午到 23:00 上午,在 y 轴上绘制两个桶中的不同操作类型。只是为了让您了解数据的最终用途。

对于 python pandas 的时间序列分析新手的任何指示,我将非常感谢 :)

我认为您正在寻找散点图而不是热图。尝试:

import matplotlib.pyplot as plt
import matplotlib.dates as md

df["Datetime"] = pd.to_datetime(pd.to_datetime(df["Datetime"], format="%d/%m/%Y %H:%M:%S").dt.strftime("%H:%M"))

ax = df.plot.scatter(x="Datetime",y="Action",rot=90)
ax.set_xlim(pd.Timestamp("06:00"), pd.Timestamp("23:00"))
ax.xaxis.set_major_locator(md.MinuteLocator(byminute = [0]))
ax.xaxis.set_major_formatter(md.DateFormatter('%H:%M'))
输出: