检查另一个列中是否包含一列中的字符串?

时间:2016-11-08 17:27:22

标签: python pandas

我正在使用主题建模方法对一些文本数据运行嵌套聚类分析。在这些方法中,"主题之间的重叠" (或主题)在某种程度上是允许的。因此,我有一些identifier已被分组为多个主题,而其他level_3_id只被发送到一个主题。

如果你看下面的话,你会注意到level_2_id的几个值已被错放,"可以这么说(即该行level_3_id的值表示与df['level_3_id']的值不同的" 2级"主题。我试图删除所有行其中df['level_2_id']中的字符串不包含In [25]: df Out[25]: identifier level_1_id level_2_id level_3_id 15293 1270599 level_1 level_12 level_111 15294 1270599 level_1 level_12 level_122 15295 1270599 level_1 level_11 level_111 15296 1270599 level_1 level_11 level_122 15704 1269594 level_1 level_11 level_143 15705 1269594 level_1 level_11 level_111 15706 1269594 level_1 level_14 level_143 15707 1269594 level_1 level_14 level_111 29843 1271580 level_1 level_10 level_100 中的字符串,但遇到一些困难。请参阅下面的代码。

import pandas as pd

pairs = list(zip(df['level_2_id'], df['level_3_id']))
new_data = [y for x, y in pairs if x in y]

我试图为这种效果做点什么(我知道它不起作用,但我希望传达这种字符串包含检查过程的一般概念):

pandas

这基本上可以提供我想要的内容,但有没有办法在df中执行此操作,这样可以避免将较短的列表分配给较长的df['level_3_id'].str.contains(df['level_2_id'].str)

这样的事,也许?

df[df.apply(axis = 1, func = lambda x: x['level_2_id'] in x['level_3_id'])]

编辑:

正确的答案,在@ Noobie的帮助之后:

{{1}}

1 个答案:

答案 0 :(得分:1)

df['level_3_id'].apply(lambda x: x['level_3_id'] in x['level_2_id'].tolist())