如何用 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))
我觉得这个方法更简单。
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))
我觉得这个方法更简单。