這是我的示例資料
Date tf tf_int
0 2022-01-01 D 1
1 2022-01-02 W 3
2 2022-01-03 M 2
3 2022-01-04 Y 2
我想創建一個新列,將所需的 timedelta 添加到 Date 列。
例如,對于我的第一行,我想在日期 (2022-1-1) 上添加 1 天,因此結果將是 2022-1-2
有沒有矢量化的方法來實作這一點?我不會.loc[]在幾天、幾周、幾個月等時間內使用多個電話來分別完成此操作;但我更希望將解決方案矢量化
我不成功的嘗試.loc[]
df.loc[df['tf'] =='D','publish_date'] = df['Date'].dt.date dt.timedelta(days = df['tf_int'])
但這會導致錯誤,因為 df['tf_int'] 是一個系列而不是一個精確值
編輯:對于我的用例,添加一個月只會影響月份組件,而不會對日期做任何事情
uj5u.com熱心網友回復:
如果需要確切的年份和月份,則需要使用串列理解解決方案offsets.DateOffset:
d = {'D':'days','W':'weeks', 'M':'months', 'Y':'years'}
df['publish_date'] = [z pd.offsets.DateOffset(**{d[y]: x})
for x, y, z in zip(df['tf_int'], df['tf'], df['Date'].dt.normalize())]
print (df)
Date tf tf_int publish_date
0 2022-01-01 D 1 2022-01-02
1 2022-01-02 W 3 2022-01-23
2 2022-01-03 M 2 2022-03-03
3 2022-01-04 Y 2 2024-01-04
uj5u.com熱心網友回復:
如果您接受月/年的近似值,則矢量解決方案可能類似于:
mapper = {'D': 1, 'W': 7, 'M': 30, 'Y': 365}
df['Date2'] = (pd.to_datetime(df['Date'])
.add(pd.to_timedelta(df['tf'].map(mapper).mul(df['tf_int']),
unit='D'))
)
輸出:
Date tf tf_int Date2
0 2022-01-01 D 1 2022-01-02
1 2022-01-02 W 3 2022-01-23
2 2022-01-03 M 2 2022-03-04
3 2022-01-04 Y 2 2024-01-04
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/493410.html
上一篇:將字串從資料庫轉換為資料框
