【问题标题】:Python Pandas: Selecting previous row of matching rowPython Pandas:选择匹配行的上一行
【发布时间】:2015-02-14 09:23:39
【问题描述】:

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

对于其中一列,我需要将非 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

感谢任何帮助。

【问题讨论】:

    标签: python python-2.7 pandas time-series


    【解决方案1】:

    这不是世界上最漂亮的方法,但就是这样。首先找到所需数据替换的整数索引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"]
    

    这是你想要的吗?

    【讨论】:

      猜你喜欢
      • 2020-12-28
      • 1970-01-01
      • 2012-03-19
      • 1970-01-01
      • 2018-07-29
      • 2017-01-10
      • 1970-01-01
      • 1970-01-01
      • 2010-12-30
      相关资源
      最近更新 更多