当前位置: 首页 > 知识库问答 >
问题:

在3列中条件为真时获取索引号

姬天逸
2023-03-14

我有一个关于python中一些代码的问题。我试图在3个不同的列中满足条件TRUE时提取第一行的索引。这是我正在使用的数据:

       0       1       2             3           4
0   TRUE    TRUE    TRUE    0.41871395  0.492517879
1   TRUE    TRUE    TRUE    0.409863582 0.519425031
2   TRUE    TRUE    TRUE    0.390077415 0.593127232
3   FALSE   FALSE   FALSE   0.372020631 0.704367199
4   FALSE   FALSE   FALSE   0.373546556 0.810876797
5   FALSE   FALSE   FALSE   0.398876919 0.86855678
6   FALSE   FALSE   FALSE   0.432142094 0.875576037
7   FALSE   FALSE   FALSE   0.454115421 0.863063448
8   FALSE   TRUE    FALSE   0.460676901 0.855739006
9   FALSE   TRUE    FALSE   0.458693197 0.855128636
10  FALSE   FALSE   FALSE   0.459201839 0.856451104
11  FALSE   FALSE   FALSE   0.458693197 0.855739006
12  FALSE   FALSE   FALSE   0.458082827 0.856349376
13  FALSE   FALSE   FALSE   0.456556902 0.856959746
14  TRUE    TRUE    TRUE    0.455946532 0.858180486
15  TRUE    TRUE    TRUE    0.455030976 0.858790857
16  TRUE    TRUE    TRUE    0.454725791 0.858485672
17  FALSE   FALSE   FALSE   0.454420606 0.857875301
18  FALSE   FALSE   FALSE   0.454725791 0.858383943
19  FALSE   TRUE    FALSE   0.453199866 0.856654561
20  FALSE   FALSE   FALSE   0.451979125 0.856349376
21  FALSE   FALSE   FALSE   0.45167394  0.856959746
22  FALSE   FALSE   FALSE   0.451775669 0.857570116
23  FALSE   FALSE   FALSE   0.45106357  0.857264931
24  TRUE    TRUE    TRUE    0.450758385 0.856654561
25  TRUE    TRUE    TRUE    0.4504532   0.856044191
26  TRUE    TRUE    TRUE    0.449232459 0.856349376
27  TRUE    TRUE    TRUE    0.448316904 0.855535549

只有当有3个“真”条件时,我才需要得到索引号:

0   
14  
24

非常感谢。

共有3个答案

孙佑运
2023-03-14

编辑2:对于一些澄清,我有一个新的答案。

您正在查找列012中包含TRUE的每一行,但您希望忽略这些行,因为它们不是连续行中的第一行。我的答案的第一部分仍然是一样的,我认为你应该创建一个掩码来选择你的TRUEtriplet行:

condition = df[[0, 1, 2]].all(axis='columns')

但是现在我提供了一种可能的方法来过滤掉要忽略的行。在连续的TRUE三行中不是第一行意味着前一行也满足条件

idx = df[condition].index
ignore = idx.isin(idx + 1)
result = idx[~ignore]

换句话说,忽略索引值是满足条件的索引值的后续行。

希望这能有所帮助!

保留我的原始答案以备记录:

我认为,通过将其分为两个步骤,您将获得最具可读性的解决方案:

首先,找出您感兴趣的所有列中哪些行的值为True

condition = df[[0, 1, 2]].all(axis='columns')

然后,您感兴趣的索引值只是df[条件]. index

编辑:如果,正如Benoit所指出的,TRUEFALSE是字符串,那很好,你只需要对第一步做一个小小的调整:

condition = (df[[0, 1, 2]] == 'TRUE').all(axis='columns')

甄阳朔
2023-03-14

我在一个演示数据框上尝试了这个,它似乎对我有用。



df = pd.DataFrame(data={'A':[True,True,True,True,True,False,True,True],'B':[True,True,False,True,True,False,True,True],'C':[True,False,True,True,True,False,True,True]})
i =df[(df['A']==True) & (df['B']==True) & (df['C']==True)].index.to_list()

i = [x for x in i if x-1 not in i]

丌官和泰
2023-03-14

我猜每个人都错过了“提取第一行的索引”部分。其中一种方法是首先删除连续的重复项,然后获得三个都为真的索引,这样您就只能得到第一行真值

df=df[['0', '1', '2']]
df=df[df.shift()!=df].dropna().all(axis=1)
print(df[df].index.tolist())

输出:

[0, 14, 24]
 类似资料:
  • 问题内容: 我们有一个以列表形式表示的菜单(简化): 在位置N处的某个地方有一个分隔符,可以通过 评估 或检查链接的文本来识别分隔符(如果使用分隔符,则为空)。 现在,目标是获取位于分隔线之前的所有菜单项。您将如何解决这个问题? 我当前的方法相当通用- 扩展和添加功能(受Python启发)。这是我如何实现它(基于): 而且,这是我的使用方式: 但是,测试只是挂直到在到达呼叫。 如果将s放入循环中和

  • 问题内容: 是否可以获得与特定模式匹配的索引列表,例如 这是获取索引列表的方法: 但是我找不到过滤它们的方法,因此该列表仅包含匹配“ my_index_nr_1 ”的索引,其中“ ”是通配符 解 在使用ES一段时间后,这里是我现在使用的东西,希望它能对其他人有所帮助: 您也可以在末尾添加,以得到结果中每一列的标题。 问题答案: 使用_aliases命令有一个巧妙的技巧,当与通配符结合使用时(下面)

  • 如何在JavaFX的网格窗格中获取列索引和行索引。请参见下面的代码 当鼠标在text1上输入时,我想获取GridPane的列索引和行索引 请让我知道。

  • 问题内容: List rateList = guestList.stream() .map(guest -> buildRate(ageRate, guestRate, guest)) .collect(Collectors.toList()); 在上面的代码中,可以通过内部方法的索引。我在构建时还需要传递索引,但无法通过获取索引。 问题答案: 您尚未提供的签名,但是我假设您希望首先传递元素的索引

  • 在R中,当需要根据可以执行的列名称检索列索引时 有没有一种方法可以对熊猫数据帧执行相同的操作?

  • 我目前有一个MxN数据帧,其中包含一个优化问题的解决方案。{M}对中的i的“活动”i、j和{N}对中的j由1表示,“非活动”对由0表示。我需要确定所有活动单元格的I,j值,希望避免索引或列上的for循环。 这将是一个例子: 在这种情况下,我需要的是对的列表(元组可以): 有办法吗? 谢谢 A. 编辑:解释不清楚编辑2:我的解释仍然不清楚