![](/img/trans.png)
[英]Calculate day of year in dataframe from a datetime column to another column in Python
[英]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.year
在start
列中獲取日期時間的年份部分,然后將其遞增1
並將dtype
更改為str
。 以類似的方式,從anniversary
列中提取month
和day
部分。 最后連接所有單獨的組件並使用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.