2017-04-13 63 views
0

我有一個數據幀descibed下面差異對象列表大熊貓據幀

Dt_Frame = pd.DataFrame() 

AIDList = ['ID1','ID2','ID3','ID4','ID5'] 
BIDList = ['ID1','ID2','ID3'] 

Dt_Frame = Dt_Frame.append ({'Country': 'USA', 'Schedule': 'Daily', 'Date': '2016-12-07', 'Status': 'Active','AListIDs' : AIDList ,'BListIDs' : BIDList}, ignore_index=True) 

我有一個增加一列Difference,顯示在2列,即AIDList和BIDList差異,在這種情況下是'ID4,'ID5',我認爲哪些套件可以用於情況下,但不知道如何做到這一點? AIDList和BIDList類型是List.And也如何添加一個列Numb_Items它給出了列表中的對象數量AIDList

回答

1

要添加新列,您可以Dt_Frame["newColumnName"] = value

關於set的區別,你的直覺是對的。首先,你可以使用applylist的成set「將S

A = Dt_Frame["AListIDs"].apply(set) 
B = Dt_Frame["BListIDs"].apply(set) 

然後將減去每邊會給你w.r.t另一組的差異。也就是說

A - B 

0 {ID4, ID5} 
dtype: object 

B - A 

0 {} 
dtype: object 

對於對稱差,我們需要A,B是相同DataFrame(無論是對symmetric_difference方法或爲|運算符):

# We add two new columns 
Dt_Frame["ASetIDs"] = A 
Dt_Frame["BSetIDs"] = B 

# We need to transpose since apply operates on columns 
Dt_Frame[["ASetIDs", "BSetIDs"]].T.apply(lambda x: x.ASetIDs.symmetric_difference(x.BSetIDs)) 
+0

謝謝....... ............... –

+1

只是一個小疑點,它是否需要轉置,我們可以做不轉置,明確設置軸爲列? –

+1

你是對的。你可以像Dt_Frame [[「ASetIDs」,「BSetIDs」]]那樣使用'axis = 1'。apply(lambda x:x.ASetIDs.symmetric_difference(x.BSetIDs),axis = 1)' – tmrlvi