2016-10-04 118 views
0

我有一個數據框的列值列表,並希望找到兩列之間的差異,換句話說,我想找到列A中不存在的所有元素B.熊貓列差異,包含列表

data={'NAME':['JOHN','MARY','CHARLIE'], 
    'A':[[1,2,3],[2,3,4],[3,4,5]], 
    'B':[[2,3,4],[3,4,5],[4,5,6]]} 
df=pd.DataFrame(data) 
df=df[['NAME','A','B']] 

#I'm able to concatenate 
df['C']=df['A']+df['B'] 

    NAME A B C 
    0 JOHN [1, 2, 3] [2, 3, 4] [1, 2, 3, 2, 3, 4] 
    1 MARY [2, 3, 4] [3, 4, 5] [2, 3, 4, 3, 4, 5] 
    2 CHARLIE [3, 4, 5] [4, 5, 6] [3, 4, 5, 4, 5, 6] 

任何方式來找到差異?

df['C']=df['A']-df['B'] 

我知道我們可以用df.apply的功能,但逐行處理會運行緩慢,因爲我有大約40萬行。我正在尋找像

df['C']=df['A']+df['B'] 
+1

什麼正是你想要的「差異」? 'df ['A']。map(set) - df ['B']。map(set)'會產生一個設定差異。 – chrisb

+0

這就是我正在尋找的!你可以添加作爲答案? 我正在嘗試df ['D'] = set(df ['A']) - set(df ['B']),我的不好! –

+0

爲上述示例工作,但在應用於大型數據集時拋出內存錯誤! –

回答

1

對於設定的差的直線前進的方法,

df['A'].map(set) - df['B'].map(set)