拆分一个Pandas数据框架,保留两个部分



我正在通过导入.csv文件创建一个数据框架。然后,我需要根据某些条件删除行。因为删除的行数非常少,所以通过检查删除的而不是保留的来验证条件更容易。我最终做了这样的事情:

dfcd=df.loc[(~df.Course_Code.str.contains('MG')) & (~df.Course_Code.str.contains('DE'))]
df=df.loc[(df.Course_Code.str.contains('MG')) | (df.Course_Code.str.contains('DE'))]

但是这感觉很笨拙,随着条件变得更加复杂,我担心我会错误地写反条件(阅读另一个线程所以我意识到我可以通过使用另一组括号来简化上面的~,但无论如何)

是否有一个命令将创建两个数据帧,其中一个条件为真,另一个条件为假?比如:

df,dfcd=df.<another_command>[(df.Course_Code.str.contains('MG')) | (df.Course_Code.str.contains('DE'))]

或者有其他更好的方法来做到这一点?

您可以将|用于正则表达式or,因此如果条件得到Falses,则可以通过~过滤条件和反转条件来简化您的解决方案:

m = df.Course_Code.str.contains('MG|DE')
#same like
# m = (df.Course_Code.str.contains('MG')) | (df.Course_Code.str.contains('DE'))
df1, df2 = df[m], df[~m]

最新更新