Python 基于一个热编码列中的多个条件对数据帧进行子集设置

Python 基于一个热编码列中的多个条件对数据帧进行子集设置,python,pandas,Python,Pandas,我想知道“快乐”、“悲伤”和“抱歉”等于1的位置 预期产出: id is_happy is_sad is_mad is_sorry 1 1 0 1 0 2 1 0 1 0 3 0 1 1 0 4 0 0 0 1 5 0 1 1 0 6 1 0 1 0 7 1

我想知道“快乐”、“悲伤”和“抱歉”等于1的位置

预期产出:

id  is_happy is_sad is_mad is_sorry
1   1        0      1      0
2   1        0      1      0
3   0        1      1      0
4   0        0      0      1
5   0        1      1      0
6   1        0      1      0
7   1        1      1      1

我怎样才能做到这一点,而不用像下面这样使用切片器设置多个条件。在很多情况下,这会变得困难吗

id  is_happy is_sad is_mad is_sorry
7   1        1      1      1

试一试

df[(df.is_happy == 1) & (df.is_sad == 1) & (df.is_sorry == 1)]

您可以使用
np.logical\u和.reduce
使多个相等检查保持紧凑。定义一个列表,其中每个元组指定要检查相等性的列和值。然后我们将其与
&
逻辑相结合,以查找每个条件都为真的行

此方法很容易扩展到您可能希望某些列为0,而其他列为1(或任何值)的情况


如果你有傻瓜,用
df[df[['is_happy','is_sad','is_sorry']]。所有(axis=1)]
使用
set_index
来摆脱一列有点奇怪。最好使用
.drop(“id”,axis=1)
来明确意图。或者更好地使用
.drop(columns=“id”)
@MaxNoe谢谢你完成了~我认为你需要drop
也是疯狂的。@PaulH啊,好的,酷
out = df[df.drop(['id','is_mad'],1).all(1)]
   id  is_happy  is_sad  is_mad  is_sorry
6   7         1       1       1         1
import numpy as np

equality_l = [('is_happy', 1), ('is_sad', 1), ('is_sorry', 1)]

m = np.logical_and.reduce([df[col].eq(val) for col,val in equality_l])
df.loc[m]

#   id  is_happy  is_sad  is_mad  is_sorry
#6   7         1       1       1         1