为了账号安全,请及时绑定邮箱和手机立即绑定

如何在熊猫中设置日期时间地板操作的基础?

如何在熊猫中设置日期时间地板操作的基础?

慕田峪4524236 2023-03-01 16:28:02
我想重新分配一系列日期的时间戳,以便它们以(例如)3 天的频率下降:import pandas as pdx = pd.date_range('01-01-2019', freq='1D', periods=7).floor('3D')y = pd.date_range('01-01-2022', freq='1D', periods=7).floor('3D')我期待“地板”与第一个日期对齐并产生:In[3]: xOut[3]: DatetimeIndex(['2019-01-01', '2019-01-01', '2019-01-01', '2019-01-04',               '2019-01-04', '2019-01-04', '2019-01-07'],              dtype='datetime64[ns]', freq=None)In[4]: yOut[4]:DatetimeIndex(['2022-01-01', '2022-01-01', '2022-01-01', '2022-01-04',               '2022-01-04', '2022-01-04', '2022-01-07'],              dtype='datetime64[ns]', freq=None)但相反,日期似乎有一个 3 天的周期(大概是自 1970 年 1 月 1 日以来 3 天的倍数?),所以结果是:In[3]: xOut[3]: DatetimeIndex(['2018-12-30', '2019-01-02', '2019-01-02', '2019-01-02',               '2019-01-05', '2019-01-05', '2019-01-05'],              dtype='datetime64[ns]', freq=None)In[4]: yOut[4]:DatetimeIndex(['2022-01-01', '2022-01-01', '2022-01-01', '2022-01-04',               '2022-01-04', '2022-01-04', '2022-01-07'],              dtype='datetime64[ns]', freq=None)结果x从 12 月 30 日开始,而不是 1 月 1 日。有没有办法为floor熊猫的操作设置一个“基地”? 我说“基础”是因为关于进行类似调整的base争论resample。但我不想做任何聚合,只保留每个元素但重新分配时间戳。
查看完整描述

1 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

x = pd.date_range('01-01-2019', freq='1D', periods=7)

y = pd.date_range('01-01-2022', freq='1D', periods=7)


def floor(x, freq):

    offset = x[0].ceil(freq) - x[0]

    return (x + offset).floor(freq) - offset


print(floor(x, '3D'))

print(floor(y, '3D'))

输出


DatetimeIndex(['2019-01-01', '2019-01-01', '2019-01-01', '2019-01-04',

               '2019-01-04', '2019-01-04', '2019-01-07'],

              dtype='datetime64[ns]', freq=None)

DatetimeIndex(['2022-01-01', '2022-01-01', '2022-01-01', '2022-01-04',

               '2022-01-04', '2022-01-04', '2022-01-07'],

              dtype='datetime64[ns]', freq=None)

添加加法逻辑:


def floor(x, freq):

    offset = x[0].ceil(freq) - x[0]

    adj_needed = (offset != pd.Timedelta(0))

    return (x + offset).floor(freq) - offset if adj_needed else x.floor(freq)


查看完整回答
反对 回复 2023-03-01
  • 1 回答
  • 0 关注
  • 86 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信