亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在熊貓中設置日期時間地板操作的基礎?

如何在熊貓中設置日期時間地板操作的基礎?

慕田峪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 關注
  • 114 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號