如果行包含列中列表中的两个值,如何过滤数据框
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_dummies
,sum
level
然后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 来做到这一点?以上是关于如果行包含列中列表中的两个值,如何过滤数据框的主要内容,如果未能解决你的问题,请参考以下文章