如何用一行代码按布尔条件拆分DataFrame为满足/不满足条件的两个子集?
拆分DataFrame为满足/不满足条件的两个子集
当然可以实现这种一行代码拆分的需求,核心思路是利用布尔掩码及其取反结果来分别筛选数据:
基础写法(直接在一行内完成)
假设你的条件是df['score'] >= 60,可以这样写:
df_pass, df_fail = df[df['score'] >= 60], df[~(df['score'] >= 60)]
更清晰的写法(先定义条件,再拆分)
如果条件比较复杂,先把布尔掩码单独定义,能避免重复写条件,可读性更强:
condition = df['score'] >= 60 df_pass, df_fail = df[condition], df[~condition]
使用query方法的写法
如果偏好字符串形式的条件表达式,也可以用query:
df_pass, df_fail = df.query('score >= 60'), df.query('not (score >= 60)')
注意:以上方法都会保留原DataFrame的索引,如果需要重置索引,可以在筛选后追加.reset_index(drop=True),比如:
df_pass, df_fail = df[condition].reset_index(drop=True), df[~condition].reset_index(drop=True)
内容的提问来源于stack exchange,提问作者mend4x
相关产品推荐
相关产品推荐

