gpt4 book ai didi

python - 如何在 Pandas 数据框中有效地查找交替 boolean 值的索引

转载 作者:太空宇宙 更新时间:2023-11-03 17:56:08 24 4
gpt4 key购买 nike

使用如下所示的数据框:

       A      B  
0 True False
1 True False
2 True False
3 False True
4 False False
5 True False

我需要获取用于在 a 列和 b 列之间交替 boolean 值的索引列表。因此,第一次 A 列显示 True 时,我可以将 0 添加到列表中。现在我切换到 B 列,找到 0 之后显示 True 的下一个索引,即 3。然后我切换回 A 列,添加下一个索引以在索引 3 之后显示 True。最后,我将得到一个包含值的列表[0,3,5]。我目前正在通过 for 循环和 if 语句迭代行来构建这些列表。我认为这不是最有效的方法。任何有关“正确”方法的帮助将不胜感激。谢谢!

最佳答案

一种方法可能是这样的:

在[3]中:

df['C'] = df.A.astype(int) - df.B.astype(int)
df['D'] = df[['C']].apply(lambda x: (x != x.shift()).astype(int).cumsum())
df[(df.C == 1) | (df.C == -1)].groupby('D').head(1).index

输出[3]:

Int64Index([0, 3, 5], dtype='int64')

我还没有对其进行广泛的测试,但它可以与您提供的示例一起使用,包括这个:

df = pd.DataFrame({'A': [True, True, False, True, False, False, True], 
'B': [False, False, True, False, False, True, False]})

在[4]中:

df['C'] = df.A.astype(int) - df.B.astype(int)
df['D'] = df[['C']].apply(lambda x: (x != x.shift()).astype(int).cumsum())
df[(df.C == 1) | (df.C == -1)].groupby('D').head(1).index.tolist()

输出[4]:

[0, 2, 3, 5, 6]

关于python - 如何在 Pandas 数据框中有效地查找交替 boolean 值的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28403628/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com