Если я правильно понимаю, то, что вы пытаетесь достичь, можно сделать с помощью следующего:
MSYs_init['Start Date'] = pd.to_datetime(MSYs_init['Start Date'], errors='coerce')
VISTAGrantYrStarts = pd.to_datetime(VISTAGrantYrStarts, errors='coerce')
VISTAGrantYr = VISTAGrantYrStarts.year
MSYs_init['VISTA Grand Year'] = np.where(MSYs_init['Start Date'].dt.year.isin(VISTAGrantYr),
MSYs_init['Start Date'].dt.year,
np.nan)
Рабочий пример:
import pandas as pd
import numpy as np
df=pd.DataFrame({'index':[0,1,2,3],
'dates':['2019-02-20','2019-02-21','2020-02-21','2021-02-20']})
df['dates'] = pd.to_datetime(df['dates'],errors='coerce')
aux = pd.to_datetime(['2017-02-20','2018-02-21','2019-02-21','2019-02-20'],errors='coerce').year
df['dates_2'] = np.where(df['dates'].dt.year.isin(aux),df['dates'].dt.year,np.nan)
Вывод:
index dates dates_2
0 0 2019-02-20 2019.0
1 1 2019-02-21 2019.0
2 2 2020-02-21 NaN
3 3 2021-02-20 NaN
@ Celius, мне нужно, чтобы он возвращал VISTAGrantYrStarts, а не «Дата начала», и поэтому, когда я пытаюсь это сделать, он не работает.
MSYs_init['Start Date'] = pd.to_datetime(MSYs_init['Start Date'],errors='coerce')
GrantStarts = pd.to_datetime(['2017-02-20','2018-02-21','2019-02-21','2019-02-20'],errors='coerce').year
MSYs_init['Mbr Grant Start'] = np.where(MSYs_init['Start Date'].dt.year.isin(GrantStarts),GrantStarts.dt.year,np.nan)
MSYs_init.head(50)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-71-52fd06b959bf> in <module>
1 MSYs_init['Start Date'] = pd.to_datetime(MSYs_init['Start Date'],errors='coerce')
2 GrantStarts = pd.to_datetime(['2017-02-20','2018-02-21','2019-02-21','2019-02-20'],errors='coerce').year
----> 3 MSYs_init['Mbr Grant Start'] = np.where(MSYs_init['Start Date'].dt.year.isin(GrantStarts),GrantStarts.dt.year,np.nan)
4 MSYs_init.head(50)
AttributeError: 'Int64Index' object has no attribute 'dt'