Python 基于一个热编码列中的多个条件对数据帧进行子集设置
我想知道“快乐”、“悲伤”和“抱歉”等于1的位置 预期产出: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
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