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

mepcadol  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(101)

我有一个DataFrame,看起来像下面这样:

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

只有当列b的同一行上的内部值是True时,我才能选择列aTrue的块?
我知道我可以找到将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
20jt8wwn

20jt8wwn1#

你可以对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函数取代,但这将是更多的代码。

相关问题