如何用 Pandas DataFrame 中先前值的一些变化替换 NaN?

How to replace NaNs with some change in previous values in Pandas DataFrame?

    0    1     2
0   10   20   30
1   40   NaN  60
2   50   55   90
3   60   NaN  80
4   70   75   90

我需要做的是分别用 30 、 65 替换每个 NaN 值。这意味着在之前的值基础上增加了 10

你可以 shift the dataframe and then add 10 , then fillna 用 df:

df = df.fillna(df.shift().add(10))
# for a new df :-> new_df = df.fillna(df.shift().add(10))

print(new_df)

    0     1   2
0  10  20.0  30
1  40  30.0  60
2  50  55.0  90
3  60  65.0  80
4  70  75.0  90

注意:如果您同时有数字和字符串列,您可以首先select只有数字列使用df.select_dtypes 然后做操作:

num_df = df.select_dtypes(np.number)
df.loc[:,num_df.columns] = num_df.fillna(num_df.shift().add(10))

如果你想创建一个新的 df 而不是修改原来的 df 然后使用 df.assign 将新值分配给列的子集:

new_df = df.assign(**num_df.fillna(num_df.shift().add(10)))

你也可以试试这个:

df = df.fillna(df.fillna(method='ffill').add(10))

我觉得这个方法更简单。