我正在尝试绘制血压读数,每个读数都有一个日期时间时间戳,其中包含读数的日期和小时:分钟:秒。
由于许多 Seaborn 回归图(lmplot、regplot 等)不支持日期时间时间戳,我只好使用如下数字序数创建一个新的数据框列:
from datetime import date
df['date_ordinal'] = pd.to_datetime(df['date']).apply(lambda date: date.toordinal())
这可行,但问题是同一天获取的多个读数都堆叠在同一个 x 轴点上。
是否有比序数更好的函数来实现将同一天的读数与日序数之后的小数值分开?
最佳答案
您可以计算date
列中的每个datetime
与最早的datetime
之间的timedelta
,然后使用timedelta
的秒数。这意味着计算自最旧时间戳以来的相对时间(以秒为单位):
df['seconds_since_start'] = df['date'].apply(lambda date: (date - df['date'].min()).seconds)
从这里,您可以使用基本数学将秒转换为天(带十进制值):
df['days_since_start'] = df['seconds_since_start'] / (60 * 60 * 24)
关于Python:我可以将日期时间转换为粒度小于一整天的 float 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68488597/