首页 > 解决方案 > 检查多个列的多个值并返回一个数据框

问题描述

我有一个字符串列表,我的数据框有几个我需要搜索的列(每个类型的对象)。

我需要返回其中任何选定列中包含任何字符串项的所有行,或者是字符串的一部分。

如何检查我的数据框中的 4 列是否包含字符串列表中的任何一项?列内的字符串可能包含列表对象中提供的部分字符串,但可能不会全部包含在内。

我已经尝试将 'list' 作为元组和 python 列表:

list = ("25110", "25910", "25990", "30110", "33110", "43999")

new_df = df.loc[(df['column1'].isin(list)) 
    | (df['column2'].isin(list)) 
    | (df['column3'].isin(list)) 
    | (df['column4'].isin(list))]

当我运行时new_df.shape,我得到 (0, 12)。

我是 pandas 的新手,需要为一个激烈的 uni 项目进行大量分析,但无法让它发挥作用。我需要先将每列转换为字符串数据类型吗?(我实际上也已经尝试过,但每种数据类型仍然顽固地是一个“对象”)。

标签: pandasdataframe

解决方案


国际大学联盟:

尝试:

lst = ["25110", "25910", "25990", "30110", "33110", "43999"]
cols=['column1','column2','column3','column4']

最后:

m=df[cols].astype(str).agg(lambda x:x.str.contains('|'.join(lst)),1).any(1)
#you can also use apply() in place of agg()
df[m]
#OR
df.loc[m]

推荐阅读