通过熊猫列按字符串选择行(有条件)

时间:2020-06-22 19:18:57

标签: python pandas

我需要从两个不同的列表中选择包含特定单词的行。 这两个列表之间的关系是:

  • 列表2中的至少一项和列表1中的至少一项,

在两个不同的列中查找它们(两个列中的至少一个应包含这些术语)。 因此,在同一列或两列中,我总是需要至少有一个list2项目+最终是list1项目。

例如

list1=['pianta','albero','muro']
list2=['parco','giardino','foresta','bosco']

原始数据集

Luogo                          Posto                + other columns
C'era una pianta               giardino                   ...
Non c'è niente da fare         a casa mia                 ...
Ho una pianta sul balcone      Che ora è?                 ...
Non ricordo che giorno è       Vorrei andare al parco     ...     

预期输出:

Luogo                          Posto                + other columns
C'era una pianta               giardino                   ...

     

我尝试使用以下代码:

df1=df[df[['Luogo','Posto']].apply(lambda x : x.str.contains('|'.join(list1))).any(1) & df[['Luogo','Posto']].apply(lambda x : x.str.contains('|'.join(list2)))]

但是它没有给我期望的输出。您能否看一下它,并告诉我如何进行改进以获得结果?

非常感谢

1 个答案:

答案 0 :(得分:0)

串联两个文本列,并检查串联字符串中是否至少出现list1项和list2项。

df[df['Luogo'].str.cat(df['Posto'], sep=" ").apply(lambda x: any([y in x for y in list1]) and any([y in x for y in list2]))]