首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何设置熊猫的日期-时间地板操作的基础?

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

Stack Overflow用户
提问于 2020-07-09 19:57:46
回答 1查看 400关注 0票数 2

我想重新分配一系列日期的时间戳,以便它们在(例如)3天的频率上受到影响:

代码语言:javascript
复制
import pandas as pd

x = 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')

我期待“楼层”与第一次约会保持一致,并制作:

代码语言:javascript
复制
In[3]: x
Out[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]: y
Out[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天的周期

代码语言:javascript
复制
In[3]: x
Out[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]: y
Out[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 有办法为熊猫的操作设定一个“基础”吗?--我说的是“基地”,因为resample中关于做类似调整的base论点。但是我不想做任何聚合,只需要保留每个元素,而是重新分配时间戳。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-09 21:13:26

代码语言:javascript
复制
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'))

输出

代码语言:javascript
复制
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)

添加加法逻辑:

代码语言:javascript
复制
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)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62822739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档