创建"或"基于列表中可能具有可变长度的元素的条件

时间:2018-02-23 20:33:11

标签: python list pandas

我有一个数据框,并希望在其中一列包含某个字符串时查找所有行:

tmp = data_frame[data_frame["DESC"].str.contains(tag, na=False)]

但是,假设tag是一个列表,我希望列包含列表中的任何字符串,例如:

tmp = data_frame[(data_frame["DESC"].str.contains(tag[0], na=False)) | (data_frame["DESC"].str.contains(tag[1], na=False))]

现在,假设我有一个列表列表,而tag是其中的一个元素,我遍历这个列表列表:

for tag in tag_list:
    tmp = data_frame[(data_frame["DESC"].str.contains(tag[0], na=False)) | (data_frame["DESC"].str.contains(tag[1], na=False))]
---do something with tmp

此外,现在假设tag_list是一个列表列表,但每个元素可能有不同的长度,所以有时标签有1个元素,有时2个,有时4个,等等。我怎样才能以独立的方式定义tmp标签的固定长度?

例如:

tmp = pandas.DataFrame(columns=["DESC"])
tmp.loc[0] = ["Hello"]
tmp.loc[1] = ["Hello"]
tmp.loc[2] = ["Hi"]
tmp.loc[3] = ["Good Morning"]

tag = ["Hi", "Hello"]

tmp2 = tmp[(tmp["DESC"].str.contains(tag[0], na=False)) | (tmp["DESC"].str.contains(tag[1], na=False))]

1 个答案:

答案 0 :(得分:1)

这应该有效。你可以尝试一下,让我知道如有必要我会做出更正:

def select_tags(df_line, taglistlist):
    for taglist in taglistlist:
        for tag in taglist:
            if df_line['DESC'].str.contains(tag, na=False)
                # INSERT LOGIC HERE
                pass

df.apply(select_tags, args=(taglistlist,), axis=1)