在Pandas中,我如何检查特定列是否在同一行中给予true?

n6lpvg4x  于 2023-05-05  发布在  其他
关注(0)|答案(2)|浏览(194)

我也有这样的df
| 色谱柱A|B栏|色谱柱C|D栏|
| --------------|--------------|--------------|--------------|
| 1|真的|假的|假的|
| 二|假的|真的|假的|
| 三|假的|假的|真的|
| 四|真的|假的|真的|
| 五|假的|真的|真的|
| 六|假的|假的|假的|
| 七|假的|真的|假的|
我想检查我的df,以了解是否有多个True值的行,因为我希望每行都不超过一个True值的列。All False是好的,1 True是好的,如果在同一行中有两个以上的True将是一个问题。每一行都是一个特定的事件。我认为列不应该重叠,但我不确定,所以我必须检查,因为在未来我需要计数“True”,如果一行有超过True,相同的事件将被计数两次。
所以我期望有这样的输出
| 色谱柱A|B栏|色谱柱C|D栏|
| --------------|--------------|--------------|--------------|
| 四|真的|假的|真的|
| 五|假的|真的|真的|

vsnjm48y

vsnjm48y1#

在Python中,布尔值实际上可以被视为整数并对其进行操作。True == 1False == 0
既然我们知道这个事实,你可以取每行数据的sum,并检查它是否是>1。如果是这种情况,那么您知道有超过1个True值。

import pandas as pd

# Load your DF Here...

#Get the sum of the columns you want to check and create a mask where that sum is more than 1.
new_df = df[df[['Column B', 'Column C', 'Column D']].sum(axis=1) > 1]

print(new_df)

使用此方法时,重要的是要确保仅使用具有boolean值的列。不要意外地在示例中包含数字列(如Column A)。

1mrurvl1

1mrurvl12#

您可以drop不需要的列,sum布尔列来计算True,并使用布尔索引来选择多个行(gt(1)):

out = df[df.drop(columns=['Column A']).sum(axis=1).gt(1)]

或者,使用select_dtypes自动选择所有布尔列:

out = df[df.select_dtypes(bool).sum(axis=1).gt(1)]

输出:

Column A  Column B  Column C  Column D
3         4      True     False      True
4         5     False      True      True

相关问题