在数据框的一列中插值(python)

时间:2019-07-12 09:55:42

标签: python pandas numpy interpolation linear-interpolation

我有一个包含三列(时间戳,温度和水位)的数据框。 我想要做的是将水位列中的所有NaN值替换为内插值。例如:

enter image description here

水位值始终减小直到为0。因此,水位不能为负。另外,如果水位保持不变,则插值也应该相同。理想情况下,插值(两个可用水位值之内)之间的步长应该相同。

到目前为止,我尝试过的是:

df['waterlevel'].interpolate(method ='linear', limit_direction ='backward')  # backwards because the waterlevel value is always decreasing.

这不起作用。执行完此行后,每个NaN值的参数“ forward”都变为0,而NaN的参数“ backward”则保持为NaN。

df = df['waterlevel'].assign(InterpolateLinear=df.target.interpolate(method='linear'))

关于如何解决此问题的任何建议?

1 个答案:

答案 0 :(得分:0)

我假设NaN是np.nan对象

import pandas as pd
import numpy as np

df = pd.DataFrame({"waterlevel": ['A',np.nan,np.nan,'D'],"interpolated values":['Ai','Bi','Ci','D']})
print(df)

df.loc[df['waterlevel'].isnull(),'waterlevel'] = df['interpolated values']
print(df)

O / P:

 waterlevel interpolated values
0          A                  Ai
1        NaN                  Bi
2        NaN                  Ci
3          D                   D

  waterlevel interpolated values
0          A                  Ai
1         Bi                  Bi
2         Ci                  Ci
3          D                   D