如何在python中做一个复杂的过滤器

问题描述 投票:1回答:3

我正在尝试基于一列进行过滤。例如,每当我看到它有account_no 1111时,我想删除该事务

输入

Date        Trans   account_no
2017-12-11  10000   1111
2017-12-11  10000   1112
2017-12-11  10000   1113
2017-12-11  10001   1111
2017-12-11  10002   1113

期望的输出

Date        Trans   account_no
2017-12-11  10002   1113

编辑:

这与运算符链接不同,因为您正在处理重复/条件过滤器

python pandas filter duplicates
3个回答
2
投票

通过使用issubset + transform

df[~df.groupby('Trans').account_no.transform(lambda x : set([1111]).issubset(x))]
Out[1658]: 
         Date  Trans  account_no
4  2017-12-11  10002        1113

1
投票

你可以分两步完成。首先使用Trans查找所有account_no值,其中.loc等于1111。然后用isin()选择所有其他交易

df[~df.Trans.isin(df.loc[df.account_no == 1111,'Trans'])]

         Date  Trans  account_no
4  2017-12-11  10002        1113

0
投票

您可以使用.loc根据系列进行过滤。

def complex_filter_criteria(x):
    return x != 1111
df.loc[df['account_no'].apply(complex_filter_criteria)]

df['account_no'].apply(complex_filter_criteria)将为True/False列中的每个条目返回一系列account_no评估。然后,当您将其传递给df.loc时,它将返回一个数据框,该数据框仅包含与系列中的True评估相对应的行。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.