我有一个像这样的bool值的pandas Dataframe:
df = pd.DataFrame(
index=range(10),
data={
'A': [False, False, True, False, False, False, False, False, True, False],
'B': [True, False, True, True, True, False, False, False, False, False]
}
)
我想将每个True
- 值扩展为至少长度True
的“n=3
- 块”,从原始True
开始向前扩展 - 值(如果我们位于DataFrame的末尾,则小于n
,请参阅下面的示例A)。理想的结果原则上按每列计算:对于每个True
,确保下一个n-1值也是True
。所以期望的输出将是
desired = pd.DataFrame(
index=range(10),
data={
'A': [False, False, True, True, True, False, False, False, True, True],
'B': [True, True, True, True, True, True, True, False, False, False
}
)
这似乎是一个简单的问题,要求一个单行,但我不能得到像熊猫一样有效的解决方案。
如果找到了this related question,但由于我不受日期间隔的约束,因此在这里并不完全适用。
答案 0 :(得分:2)
<强>更新强>
In [97]: df.replace(False, np.nan).ffill(limit=2).fillna(False).astype(bool)
Out[97]:
A B
0 False True
1 False True
2 True True
3 True True
4 True True
5 False True
6 False True
7 False False
8 True False
9 True False
旧回答:
In [55]: idx = df.loc[df.B].index
In [57]: df.loc[idx.union(idx+1).union(idx+2), 'B'] = True
In [58]: df
Out[58]:
A B
0 False True
1 False True
2 True True
3 False True
4 False True
5 False True
6 False True
7 False False
8 True False
9 False False