Год смещения с Pandas Dataframe DateOffset [дубликат]

13
задан 0nir 1 July 2015 в 19:14
поделиться

3 ответа

Вы можете использовать DateOffset для достижения этого:

In [15]:    
df['NEW_DATE'] = df['ACC_DATE'].apply(lambda x: x - pd.DateOffset(years=1))
df

Out[15]:
        ACC_DATE   NEW_DATE
index                      
538   2006-04-07 2005-04-07
550   2006-04-12 2005-04-12

update

Глядя на этот вопрос через 3 года, используя apply, вы можете просто сделать:

In[88]:
df['NEW_DATE'] = df['ACC_DATE'] - pd.DateOffset(years=1)
df

Out[88]: 
        ACC_DATE   NEW_DATE
index                      
538   2006-04-07 2005-04-07
550   2006-04-12 2005-04-12

, который является векторизованной операцией

30
ответ дан EdChum 19 August 2018 в 13:36
поделиться
  • 1
    Мне любопытно, что он делает, когда ваша дата начала 29 февраля? – Mark Ransom 1 July 2015 в 20:18
  • 2
    @MarkRansom хороший вопрос Я просто попробовал это, потому что 2004-02-29 вычитание года становится 2003-02-28 – EdChum 1 July 2015 в 21:24

Использовать DateOffset :

df["NEW_DATE"] = df["ACC_DATE"] - pd.offsets.DateOffset(years=1)
print (df)
        ACC_DATE   NEW_DATE
index                      
538   2006-04-07 2005-04-07
550   2006-04-12 2005-04-12
7
ответ дан jezrael 19 August 2018 в 13:36
поделиться
  • 1
    Что ты здесь делаешь? ;) – IanS 25 September 2017 в 11:53
  • 2
    Это обман, поэтому добавьте другое решение;) Спасибо. – jezrael 25 September 2017 в 11:54
  • 3
    Это должен быть принятый ответ, поскольку он использует векторизация – user32185 10 January 2018 в 14:52
  • 4
    Да, я нахожу в мета, если возможно проверить, кто это, но еще не удача ... – jezrael 26 January 2018 в 09:34

Вы можете использовать pd.Timedelta:

df["NEW_DATE"] = df["ACC_DATE"] - pd.Timedelta(days=365) 

Или заменить:

df["NEW_DATE"] = df["ACC_DATE"].apply(lambda x: x.replace(year=x.year - 1))

Но ни один из них не будет ловить високосные годы, чтобы вы могли использовать dateutil.relativedelta:

from dateutil.relativedelta import  relativedelta

df["NEW_DATE"] = df["ACC_DATE"].apply(lambda x: x - relativedelta(years=1))
8
ответ дан Padraic Cunningham 19 August 2018 в 13:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: