有没有办法为 DataFrame 的部分选择内部 True 值?

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

我有一个如下所示的数据框:

df = pd.DataFrame({'a':[True]*5+[False]*5+[True]*5,'b':[False]+[True]*3+[False]+[True]*5+[False]*4+[True]})

        a      b
0    True  False
1    True   True
2    True   True
3    True   True
4    True  False
5   False   True
6   False   True
7   False   True
8   False   True
9   False   True
10   True  False
11   True  False
12   True  False
13   True  False
14   True  False

仅当列

a
的同一行上的内部值为
True
时,如何才能选择列
b
True
的块?

我知道我可以将 DataFrame 分成连续的

True
区域,并对每个 DataFrame 块应用一个函数,但这是针对 1000 万行以上的更大问题,我认为这样的解决方案不会扩展得很好。

我的预期输出如下:

        a      b      c
0    True  False   True
1    True   True   True
2    True   True   True
3    True   True   True
4    True  False   True
5   False   True  False
6   False   True  False
7   False   True  False
8   False   True  False
9   False   True  False
10   True  False  False
11   True  False  False
12   True  False  False
13   True  False  False
14   True   True  False
python pandas dataframe numpy boolean
1个回答
0
投票

您可以对 a 值进行 groupby,然后查看函数中的 b 值,如下所示:

groupby_consec_a = df.groupby(df.a.diff().ne(0).cumsum())
all_interior = lambda x: x.iloc[1:-1].all()
df['c'] = df.a & groupby_consec_a.b.transform(all_interior)

尝试一下它对您的数据是否足够快。如果没有,则 lambda 必须替换为 pandas 函数,但这会需要更多代码。

© www.soinside.com 2019 - 2024. All rights reserved.