如何更改数据框中列中两个相似布尔值之间的布尔值
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
我正在处理不同大小的数据帧。如果在数据帧中同一列的两个 '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