1

我有一个包含销售和优惠的数据框。

df  offer                       sales
0   £10 off appple               10
1   £10 off apple and samsung    20

我有一个我想避免的报价列表,在这个例子中只有 1 个报价。

remove_these_offers_list = ["£10 off appple"]

当我尝试使用删除此优惠时, df.loc[~(df.offer.isin(remove_these_offers_list))] 我得到一个空的 df,因为从技术上讲,该字符串包含在两行中。

预期产出

df  offer                        sales
1   £10 off apple and samsung     20
4

2 回答 2

2

尝试使用以下方法去除空白str.strip()

df=df.loc[~(df['offer'].str.strip().isin(remove_these_offers_list))]

或者

由于您提到的方法正在以另一种方式通过str.fullmatch()

df=df.loc[~df['offer'].str.fullmatch('|'.join(remove_these_offers_list))]

输出df

    df  offer                       sales
1   1   £10 off apple and samsung   20
于 2021-08-09T17:41:06.423 回答
0

你可以做:

df[~df['offer'].isin(remove_these_offers_list)]

isin 应该适用于列表,而不是包含的字符串,因此只有完全匹配才有效

于 2021-08-09T17:41:09.253 回答