Python Pandas ffill if语句问题()

我有以下时间序列, 用于测量两列中起点和终点之间的变化。我想使用向量化的方法来计算第l列, 而不是在Pandas中记录从头到尾的路径的迭代。请问有简单的方法来计算列吗? ffill()和其他填充技术似乎并没有解决起始位置和结束位置之间的空白。有没有一种方法可以ffill/bfill以帮助解决此问题?
注意:s和e对应于开始和结束位置。我想建立一个序列, 其中l仅在s和e位置之间, 但不包括开始位置(并且不包括没有开始和结束的位置)。
在下面的示例中, 我们要在0-2行中用第一行以外的行填充l。还希望确保在我们有另一个s之前, 我们不会在行中添加一个。

sel 01.0 NaN NaN 1NaN NaN 1.0 2NaN 1.0 1.0 3NaN NaN NaN 4NaN NaN NaN 5NaN NaN NaN 6NaN NaN NaN 71.0 NaN NaN 81.0 1.0 1.0 91.0 1.0 1.0 101.0 1.0 1.0 11NaN 1.0 1.0 12NaN NaN NaN 13NaN NaN NaN

谢谢, 非常感谢你的帮助!
#1解决这些难以向量化的问题的一个好方法是使用numba。通过使用numba, 代码可以编译到C级, 因此在大型数据帧上应该可以很好地执行。通过具体化签名中的numba类型, 我们可以提前进行编译并进一步提高性能:
from numba import njit, float32@njit('float32[:](float64[:, :])') def ffill_conditional(a): flag_col0 = 0 out = np.full(a.shape[0], fill_value=http://www.srcmini.com/np.nan, dtype=float32) for i in range(a.shape[0]): if a[i, 0]==1. and flag_col0==0: flag_col0 = 1 from_col0 = i+1 elif a[i, 1]==1 and np.isnan(a[i+1, 1]) and flag_col0==1: till_col1 = i+1 out[from_col0:till_col1] = 1. flag_col0=0 return out

【Python Pandas ffill if语句问题()】检查共享示例:
a = df.values[:, :2] df['l'] = ffill_conditional(a)print(df)sel 01.0NaNNaN 1NaNNaN1.0 2NaN1.01.0 3NaNNaNNaN 4NaNNaNNaN 5NaNNaNNaN 6NaNNaNNaN 71.0NaNNaN 81.01.01.0 91.01.01.0 101.01.01.0 11NaN1.01.0 12NaNNaNNaN 13NaNNaNNaN

    推荐阅读