如何在数据帧中的列中更改两个类似布尔值之间的布尔值



我正在处理不同大小的数据帧。如果在数据帧中同一列的两个"False"布尔值之间找到"True"布尔值,则我需要将数据帧中列中的"True"Boolean更改为"False"Boolean。

这是一个数据帧的例子:

df=

index        DATE     S_N        A  timestamp  delta   time  
0      7  2021-01-05  78          4 2021-01-05    NaT    NaN   
1      8  2021-01-07  78          3 2021-01-07 2 days   48.0   
2      9  2021-01-08  78          3 2021-01-08 1 days   24.0   
3     10  2021-01-10  78          3 2021-01-10 2 days   48.0   
4     11  2021-01-11  78          6 2021-01-11 1 days   24.0   
5     12  2021-01-12  78          5 2021-01-12 1 days   24.0   
6     13  2021-01-16  78          4 2021-01-16 4 days   96.0   
7     14  2021-01-17  78          4 2021-01-17 1 days   24.0   
8     15  2021-01-22  78          3 2021-01-22 5 days  120.0   
9     16  2021-01-24  78          3 2021-01-24 2 days   48.0   
label_number_hours  
0                True  
1                True  
2               False  
3                True  
4               False  
5               False  
6                True  
7               False  
8                True  
9                True  

这就是我要找的:

df1=

index        DATE   S_N          A  timestamp  delta   time  
0      7  2021-01-05  78          4 2021-01-05    NaT    NaN   
1      8  2021-01-07  78          3 2021-01-07 2 days   48.0   
2      9  2021-01-08  78          3 2021-01-08 1 days   24.0   
3     10  2021-01-10  78          3 2021-01-10 2 days   48.0   
4     11  2021-01-11  78          6 2021-01-11 1 days   24.0   
5     12  2021-01-12  78          5 2021-01-12 1 days   24.0   
6     13  2021-01-16  78          4 2021-01-16 4 days   96.0   
7     14  2021-01-17  78          4 2021-01-17 1 days   24.0   
8     15  2021-01-22  78          3 2021-01-22 5 days  120.0   
9     16  2021-01-24  78          3 2021-01-24 2 days   48.0   
label_number_hours  
0                True  
1                True  
2               False  
3               False  
4               False  
5               False  
6               False  
7               False  
8                True  
9                True  

这是我的代码:

df1=df(子集="label_number_hours"(

这是我得到的结果:

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

我正在寻找类似于上述df1的输出。

我真的需要你的帮助

您可以使用np.where查找所有False值的索引,并覆盖第一个和最后一个之间的布尔值:

import pandas as pd
import numpy as np
df = pd.DataFrame([True, False, True, False, True, False, True], columns=["label_number_hours"])
df["some_other_column"] = np.random.rand(df.shape[0])
falses_idx, = np.where(~df["label_number_hours"])
if falses_idx.size > 0:
df.iloc[falses_idx[0]:falses_idx[-1], df.columns.get_loc("label_number_hours")] = False