2017-10-18 103 views
1

功能我有一個數據幀是這樣的:大熊貓與ISIN

aa  bb cc 
[a, x, y] a 1 
[b, d, z] b 2 
[c, e, f] s 3 
np.nan d 4 

我想創建這樣一個新列:

aa  bb cc dd 
[a, x, y] a 1 True 
[b, d, z] b 2 True 
[c, e, f] s 3 False 
np.nan d 4 False 

我目前的解決辦法是:

def some_function(row): 
    if row['bb].isin(row['aa'])==True: 
     return True 
    return False 
df['dd'] = df.apply(lambda row: some_function(row), axis=1) 

但是這會拋出一個錯誤("'str' object has no attribute 'isin'", 'occurred at index 0')

我懷疑,因爲我在檢查isin時錯過了一些東西。

本質上,我需要檢查bb的str值是否在列aa,它在每個單元格中都有一個列表。

有關如何做到這一點的任何想法?

回答

2

您在列表需要的參數in進行檢查成員:

df['dd'] = df.apply(lambda x: x.bb in x.aa, axis=1) 
print (df) 
      aa bb cc  dd 
0 [a, x, y] a 1 True 
1 [b, d, z] b 2 True 
2 [c, e, f] s 3 False 

編輯:

df['dd'] = df.apply(lambda x: (x.bb in x.aa) and (x.cc == 1), axis=1) 
print (df) 
      aa bb cc  dd 
0 [a, x, y] a 1 True 
1 [b, d, z] b 2 False 
2 [c, e, f] s 3 False 

或者:

df['dd'] = df.apply(lambda x: x.bb in x.aa, axis=1) & (df['cc'] == 1) 
print (df) 
      aa bb cc  dd 
0 [a, x, y] a 1 True 
1 [b, d, z] b 2 False 
2 [c, e, f] s 3 False 

編輯:

df['dd'] = df.apply(lambda x: x.bb in x.aa if type(x.aa) == list else False, axis=1) 
print (df) 
      aa bb cc  dd 
0 [a, x, y] a 1 True 
1 [b, d, z] b 2 True 
2 [c, e, f] s 3 False 
4  NaN d 4 False 
+0

噢謝謝@jezrael如果它是一個條件邏輯怎麼樣。即只有當df ['cc'] == 1? – Kvothe

+0

檢查上次編輯。 – jezrael

+0

啊謝謝!只是最後一個問題。你將如何處理缺失的值?通常在df ['aa']中有空白值。我用這個例子更新了這個問題。 – Kvothe