在python中,如何为DataFrame中所有移位的行移位并填充特定值?

In python, how to shift and fill with a specific values for all the shifted rows in DataFrame?

我有以下数据框。

y = pd.DataFrame(np.zeros((10,1), dtype = 'bool'), columns = ['A'])
y.iloc[[3,5], 0] = True

      A
0  False
1  False
2  False
3   True
4  False
5   True
6  False
7  False
8  False
9  False

我想为接下来的三行制作 'True',从上面数据框中找到 'True' 的地方开始。预期结果如下所示。

       A
0  False
1  False
2  False
3   True
4   True
5   True
6   True
7   True
8  False
9  False

我可以通过以下方式做到这一点,但我想知道是否有更聪明的方法来做到这一点。

y['B'] = y['A'].shift()
y['C'] = y['B'].shift()
y['D'] = y.any(axis = 1)

y['A'] = y['D']
y = y['A']

提前感谢您的帮助。

我使用参数 limit 将缺失值替换 False 替换为缺失值,最后将 NaNs 替换为 False:

y.A = y.A.replace(False, np.nan).ffill(limit=2).fillna(False)
print (y)
      A
0  False
1  False
2  False
3   True
4   True
5   True
6   True
7   True
8  False
9  False

Rolling.applyany 的另一个想法是每个 window 测试至少一个 True:

y.A = y.A.rolling(3, min_periods=1).apply(lambda x: x.any()).astype(bool)