如果我有一个布尔 pandas 列,我怎样才能使每个 True 值后面至少有 2 个 False 值?是否可以将 2 变成一个变量,以便我可以将其调整为任何整数?我还需要使用矢量化方法来完成此操作。
例如,如果我有 df['bool_col'] = [False, True, False, False, True, True, False, True, False, True, False, True, True] 和一个设置为 2 的变量,我想创建另一列 df['new_col'] = [False, True, False, False, True, False, False, True, False, False, False, True, False]。因此,只要有 True 值,后面就至少有 2 个 False 值。
我已经使用 for 循环完成了此操作,但我无法使用矢量化来解决这个问题。
您想要定义
false_after_true
的数量并循环遍历您的 df
import pandas as pd
data = {'bool_col': [False, True, False, False, True, True, False, True, False, True, False, True, True]}
df = pd.DataFrame(data)
num_false_after_true = 2
true_indices = df.index[df['bool_col']]
false_indices = []
for index in true_indices:
for i in range(1, num_false_after_true + 1):
new_index = index + i
if new_index < len(df):
false_indices.append(new_index)
df['new_col'] = df['bool_col']
df.loc[false_indices, 'new_col'] = False
print(df)
这给出了
bool_col new_col
0 False False
1 True True
2 False False
3 False False
4 True True
5 True False
6 False False
7 True False
8 False False
9 True False
10 False False
11 True False
12 True False