Python Pandas:选择上一行匹配行

时间:2014-12-16 05:45:02

标签: python python-2.7 pandas time-series

假设我有一个包含多列和时间序列索引的数据框。

对于其中一列,我需要在非NaN值之前立即用另一列中的值替换NaN。

为了说明这一点,请参阅下面的

2003-10-24 02:00:00 NaN 2003-10-24 03:00:00 NaN 2003-10-24 04:00:00 0.001 2003-10-24 05:00:00 NaN 2003-10-24 06:00:00 NaN 2003-10-24 07:00:00 0.006 2003-10-24 08:00:00 NaN 2003-10-24 09:00:00 NaN 2003-10-24 10:00:00 NaN 2003-10-24 11:00:00 0.004

会变成

2003-10-24 02:00:00 NaN 2003-10-24 03:00:00 0.002 2003-10-24 04:00:00 0.001 2003-10-24 05:00:00 NaN 2003-10-24 06:00:00 0.001 2003-10-24 07:00:00 0.006 2003-10-24 08:00:00 NaN 2003-10-24 09:00:00 NaN 2003-10-24 10:00:00 0.003 2003-10-24 11:00:00 0.004

例如,具有替换数据的列是

2003-10-24 02:00:00 0.001 2003-10-24 03:00:00 0.002 2003-10-24 04:00:00 0.001 2003-10-24 05:00:00 0.015 2003-10-24 06:00:00 0.001 2003-10-24 07:00:00 0.006 2003-10-24 08:00:00 0.005 2003-10-24 09:00:00 0.002 2003-10-24 10:00:00 0.003 2003-10-24 11:00:00 0.004

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

这不是世界上最漂亮的方法,但这里有。首先找到所需数据替换ind的整数索引。在以下示例中,我将df["col1"]的值替换为df["col2"]

import numpy as np

ind = np.where( df.col1.isnull() & df.col1.shift(-1).notnull() )

df.loc[df.index[ind], "col1"] = df.loc[df.index[ind], "col2"]

这是你想要的吗?