如何更改数据框中列中两个相似布尔值之间的布尔值

How to change the Boolean between two similar Booleans in a column in dataframe

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

这是数据帧之一的示例:

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