如何使用一列的值作为字符串的一部分来填充另一列中的 NaN?

How to use the value of one column as part of a string to fill NaNs in another column?

假设我有以下 df:

   year  date_until
1  2010  -
2  2011  30.06.13
3  2011  NaN
4  2015  30.06.18
5  2020  -

我想用 30/06/{year +1} 填充 date_until 列中的所有 -NaN。我尝试了以下但它使用整年列而不是特定行的相应值:

df['date_until] = df['date_until].str.replace('-', f'30/06/{df["year"]+1}')

我的最终目标是计算年份和date_until年份的差值,所以上面的步骤可能就更不需要了。

我们可以在这里使用 pd.to_datetimeerrors='coerce' 来忽略错误的日期。然后用dt.year计算差值:

df['date_until'] = pd.to_datetime(df['date_until'], format='%d.%m.%y', errors='coerce')
df['diff_year'] = df['date_until'].dt.year - df['year']
   year date_until  diff_year
0  2010        NaT        NaN
1  2011 2013-06-30        2.0
2  2011        NaT        NaN
3  2015 2018-06-30        3.0
4  2020        NaT        NaN

对于像我一开始那样尝试替换值的每个人,这里是您可以解决的方法:

for i in range(len(df)):
    if pd.isna(df['date_until'].iloc[i]):
        df['date_until'].iloc[i] = f'30.06.{df["year"].iloc[i] +1}'
    if df['date_until'].iloc[i] == '-':
        df['date_until'].iloc[i] = f'30.06.{df["year"].iloc[i] +1}

但是@Erfan 的方法更简洁