我正在处理不同大小的数据帧。如果在数据帧中同一列的两个"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