簡體   English   中英

將日期時間列的年份更改為另一列的年份 + 1

[英]change year of datetime column by the year of another column + 1

我想通過這種方式計算周年紀念列:保留日期和月份,並將年份更改為與開始列相同的年份+1

這是我的 pandas dataframe:

| index |   start       |      end       |     anniversary|   
| ----- | -----------   | -------------- | -------------- | 
| 0     |   2008-02-11  |    2009-03-13  |   2009-02-11   |     
| 1     |   2009-03-13  |    2010-03-13  |   2009-02-11   |     
| 2     |   2010-03-13  |    2011-03-15  |   2009-02-11   |     

我想得到什么:

| index |   start       |      end       |     anniversary|   
| ----- | -----------   | -------------- | -------------- | 
| 0     |   2008-02-11  |    2009-03-13  |   2009-02-11   |     
| 1     |   2009-03-13  |    2010-03-13  |   2010-02-11   |     
| 2     |   2010-03-13  |    2011-09-19  |   2011-02-11   |      

您可以使用dt.yearstart列中獲取日期時間的年份部分,然后將其遞增1並將dtype更改為str 以類似的方式,從anniversary列中提取monthday部分。 最后連接所有單獨的組件並使用pd.to_datetime轉換回datetime

year = df['start'].dt.year.add(1).astype(str)
month_day = df['anniversary'].dt.strftime('%m%d')

df['anniversary'] = pd.to_datetime(year + month_day, format='%Y%m%d')

>>> df
           start         end anniversary
index                                   
0     2008-02-11  2009-03-13  2009-02-11
1     2009-03-13  2010-03-13  2010-02-11
2     2010-03-13  2011-03-15  2011-02-11

只是為了好玩單行實現:

out = df.assign(anniversary=pd.to_datetime(pd.concat(
          [df["start"].dt.year + 1, df["anniversary"].dt.month, df["anniversary"].dt.day],
          axis="columns").set_axis(["year", "month", "day"], axis="columns")))
>>> out
       start        end anniversary
0 2008-02-11 2009-03-13  2009-02-11
1 2009-03-13 2010-03-13  2010-02-11
2 2010-03-13 2011-03-15  2011-02-11

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM