【问题标题】: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))]

谢谢大家

【问题讨论】:

    标签: python database pandas dataframe dataset


    【解决方案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 来做到这一点?
    猜你喜欢
    • 1970-01-01
    • 2018-12-20
    • 2021-11-30
    • 2021-02-11
    • 2020-11-27
    • 2018-08-07
    • 2022-01-10
    • 2020-01-18
    • 2020-04-28
    相关资源
    最近更新 更多