2016-11-08 95 views
1

我正在使用主题建模方法对某些文本数据运行嵌套的群集分析。在这些方法中,在一定程度上允许“主题”(或主题)之间的重叠。因此,我有一些identifier已被分组为多个主题,而其他人只被发送到一个主题。检查另一列中是否包含字符串?

如果你看看下面,你会发现为level_3_id这几个值已被“放错地方,”可以这么说(即该行的level_2_id的值表示不同的“等级2”的主题不是确实为level_3_id值。我想放弃在这df['level_3_id']字符串不包含在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) 

编辑:

一个正确的答案,之后@ Noobie的帮助下:

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

回答

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

我得到这个错误,虽然:'类型错误: '系列' 的对象是可变的,因此,他们不能被散列' – blacksite

+0

更新仍然不起作用:'TypeError:字符串指示符必须是整数'。不应该将“应用”函数应用于整个数据帧,而不是系列'df ['level_3_id']'?编辑:即使应用于整个df,也会引发相同的错误。 – blacksite

相关问题