首页 > 解决方案 > 根据一组列中的条件选择行

问题描述

我有一个df

df = pd.DataFrame({'s1':[1,1],'s2':['-',1],'s3':[1,'-'], 's4':[0,1], 's5':[0,1], 's6':['-',1], 's7':[0,'-'], 's8':[0,0]})  

    s1  s2  s3  s4  s5  s6  s7  s8  
0   1   -   1   0   0   -   0   0  
1   1   1   -   1   1   1   -   0  

我想根据多组列中的条件选择行,以便
在 s1、s2、s3 或 s4 中至少观察到一次“1”,而在 s5、s6、s7 或 s8 中未观察到“1”

“在 s5、s6 或 s7 中至少观察到 1 次,而在 s1、s2、s3、s4、s7 或 s8 中未观察到“1”

结果应该只有第一行

标签: pandas

解决方案


定义两组条件并使用布尔索引,

cond1 = df[['s1', 's2', 's3','s4']].eq(1).any(1)
cond2 = df[['s5', 's6', 's7','s8']].ne(1).all(1)

df.loc[(cond1 & cond2)]


    s1  s2  s3  s4  s5  s6  s7  s8
0   1   -   1   0   0   -   0   0

推荐阅读