如何获取 python 中未过滤的行?

How to get the un-filtered rows in python?

我对过滤有疑问。所以,我有一个基于条件的数据集。现在根据条件我得到过滤记录但我也想要未过滤的数据我们如何得到它?

代码:

df =

  a   b   c
0 1   2   3
1 21  02  1
2 18  03  2
3 20  1   1
4 1   1   18
5 0   0   1
filter = 'a>1 and c<3'
df.query(filter) 

为此输出:

a   b   c
1 21  02  1
2 18  03  2
3 20  1   1

现在我也想要其他记录。我们如何获得未过滤的记录?

异常输出:

a   b   c
0 1   2   3
4 1   1   18
5 0   0   1

首先,我重新创建您的数据框并根据您的条件创建所需的子集数据框:

df = pd.DataFrame({'a':[1,21,18,20,1,0],
'b':[2,2,3,1,1,0],
'c':[3,1,2,1,18,1]})

filter = 'a>1 and c<3'
df_subset = df.query(filter)

然后我们合并原始子集,过滤掉未合并的值并删除列 _merge

df_1 = df.merge(df_subset, how='left', indicator=True)
df_1 = df_1[df_1['_merge'] == 'left_only']
df_1.drop(['_merge'],axis=1, inplace = True)

这会为您提供所需的输出,由数据框 df_1:

表示

或者您可以简单地过滤 post 合并而不删除该列,即

df_1 = df.merge(df_subset, how='left', indicator=True)
df_1[df_1['_merge'] == 'left_only'][['a','b','c']]