Вы можете сделать это в два этапа,
сначала напишем логическое значение для измерения нулевых значений.
nulls = df['Price'].isna()
Если это условие истинно, возьмите строку выше.
s = df['Price'].isna().shift(-1).fillna(False)
затем присвойте эти значения этой строке (нулевой строке). мы можем использовать .values
для назначения в виде списка.
df.loc[nulls,'Price'] = df.loc[s,'Price'].values
затем назначить перемещенные значения как пустые.
df.loc[s,'Price'] = np.nan
в одном go.
nulls = df['Price'].isna()
s = df['Price'].isna().shift(-1).fillna(False)
df.loc[nulls,'Price'] = df.loc[s,'Price'].values
df.loc[s,'Price'] = np.nan
print(df)
Client Price
0 Desc of A NaN
1 Client A 20.0
2 Client B 30.0
3 Desc of C NaN
4 Client C 10.0