首页 > 解决方案 > 使用依赖条件过滤 DataFrame 中的行

问题描述

抱歉,如果这已经被问到:

我想删除一列中值在 15-25 之间的所有行,并在另一列中有特定字符串。

例如:

options = ['pizza', 'pasta'] 

df2 = df[(~df['columnA'].between(15, 25)) & df.loc[~df['columnB'].isin(options)]]

因此,如果一行在 columnA 中的值为 15-25,但在 columnB 中没有“pizza”或“pasta”,那么我希望保留该行......

解决方案:

df[~((df['columnA'].between(15, 25)) & (df['columnB'].isin(options)))]

标签: pythonpandas

解决方案


最容易理解的是否定整个条件,例如~((...) & (...))

df[~((df['columnA'].between(15, 25)) & (df['columnB'].isin(options)))]

或者您可以使用德摩根定律[wiki],并将其指定为(~ ...) | (~ ...)

df[(~df['columnA'].between(15, 25)) | (~df['columnB'].isin(options))]

所以x ∧ y的否定是(¬x)∨(¬y)


推荐阅读