2016-11-08 82 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

相關問題