我在跑Pandas 1.50

下面,我为2个不同的时间戳运行相同的代码,并得到2个不同的答案.

def test(now):
    now = pd.Timestamp(now)
    floored = now.floor(pd.Timedelta("48 hours"))
    diff = now - floored

    print(f"{now}, {interval}, {floored}, {diff}")

test('2023-10-18 23:59:03.793642')
test('2023-10-11 23:59:03.793642')

test函数中,我将时间戳固定为48小时间隔,然后计算原始时间戳和固定时间戳之间的时间增量差.

The first timestamp floors to midnight on the same day (so to a 24 hour interval).
The second timestamp floors to midnight on the previousday (so to a 48 hour interval - as requested).

Output:

2023-10-18 23:59:03.793642, 48 hours, 2023-10-18 00:00:00, 0 days 23:59:03.793642
2023-10-11 23:59:03.793642, 48 hours, 2023-10-10 00:00:00, 1 days 23:59:03.793642

这是怎么回事?

为什么我会得到不同的结果?

推荐答案

now.floor(pd.Timedelta("48 hours"))不是2 days ago的底线,它是自纪元以来的前48小时的底线.

import matplotlib.pyplot as plt

dates = pd.date_range('2023-10-01', '2023-10-10', freq='1h')
ax = plt.subplot()
plt.xticks(rotation=45)
ax.plot(dates, dates.floor(pd.Timedelta("48 hours")))

enter image description here

您可能应该使用DateOffset:

def test(now):
    now = pd.Timestamp(now)
    floored = (now-pd.DateOffset(days=2)).floor('D')
    diff = now - floored

    print(f"{now}, {floored}, {diff}")

test('2023-10-18 23:59:03.793642')
test('2023-10-11 23:59:03.793642')

输出:

2023-10-18 23:59:03.793642, 2023-10-16 00:00:00, 2 days 23:59:03.793642
2023-10-11 23:59:03.793642, 2023-10-09 00:00:00, 2 days 23:59:03.793642

图形比较:

enter image description here

Python相关问答推荐

由于瓶颈,Python代码执行太慢-寻求性能优化

Python中的负前瞻性regex遇到麻烦

通过优化空间在Python中的饼图中添加标签

对Numpy函数进行载体化

比较2 PD.数组的令人惊讶的结果

将jit与numpy linSpace函数一起使用时出错

try 在树叶 map 上应用覆盖磁贴

如何将双框框列中的成对变成两个新列

类型错误:输入类型不支持ufuncisnan-在执行Mann-Whitney U测试时[SOLVED]

运行总计基于多列pandas的分组和总和

通过pandas向每个非空单元格添加子字符串

组/群集按字符串中的子字符串或子字符串中的字符串轮询数据框

使用密钥字典重新配置嵌套字典密钥名

当点击tkinter菜单而不是菜单选项时,如何执行命令?

dask无groupby(ddf. agg([min,max])?''''

使用类型提示进行类型转换

什么是一种快速而优雅的方式来转换一个包含一串重复的列,而不对同一个值多次运行转换,

数据框,如果值在范围内,则获取范围和

我可以不带视频系统的pygame,只用于游戏手柄输入吗?''

如何为需要初始化的具体类实现依赖反转和接口分离?