Pandas 布尔调节

问题描述 投票:0回答:1

如果我有一个布尔 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 循环完成了此操作,但我无法使用矢量化来解决这个问题。

python pandas boolean
1个回答
0
投票

您想要定义

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
© www.soinside.com 2019 - 2024. All rights reserved.