如果行包含列中列表中的两个值,如何过滤数据框

Posted

技术标签:

【中文标题】如果行包含列中列表中的两个值,如何过滤数据框【英文标题】:how to filter a dataframe if a rows contains two values from a list in a column 【发布时间】:2020-03-03 02:33:25 【问题描述】:

我需要过滤一个巨大的熊猫数据框,该数据框在“A”列中包含列表中的两个单词。 我已经过滤了它,只考虑了 word_list 中的一个值,但我没有弄清楚如何处理两个值。

new_df = df[df["A"].apply(lambda x: any(i in x.split() for i in word_list))]

谢谢大家

【问题讨论】:

【参考方案1】:

你可以explode然后get_dummiessumlevel然后sum列,如果行返回值大于2,我们应该选择

df[df["A"].explode().str.get_dummies().\
     sum(level=0).gt(0).reindex(columns=word_list).sum(axis=1).ge(2)]

或者我们可以sklearn.MultiLabelBinarizer

from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
s=pd.DataFrame(mlb.fit_transform(df['A']),columns=mlb.classes_, index=df.index)
df[s.sum(axis=1).gt(1)]

【讨论】:

我的代码必须要快,有没有办法使用 lambda 来做到这一点?

以上是关于如果行包含列中列表中的两个值,如何过滤数据框的主要内容,如果未能解决你的问题,请参考以下文章

PySpark - 如何根据列中的两个值从数据框中过滤出连续的行块

如果列中的值在一组值列表中,则过滤数据框行[重复]

通过匹配连续列中的值过滤 R 数据帧行

如何链接多个组合框表中的两个组合框?

根据列中的共同值将大数据框拆分为数据框列表

如何突出显示数据框的两个不同列中的唯一数据值?