昨天才問過問題今天又來打擾大家了
我是用python來寫程式的,其中有用到pandas這個模組。
今天要問的是差集的問題,在網路上爬文後有發現其中一個寫法可以達到差集的效果,但看不太懂他是怎麼運作的,所以想向大家請教
我自己所使用到的參數意義
1.concat([dataframe1,dataframe2,dataframe2])
dataframe1 跟 dataframe2 是資料
2.drop_duplicates(keep = False)
False是指,把所有搜尋到的重複資料都刪除,一個都不保留,即如果有兩行資料重複,把兩行資料都刪除,而不是保留其中一行。
圖一.dataframe1
圖二.dataframe2
圖三.兩種差集
你觀察你左邊數字的ID
你dataframe2(也就是py)裡面不是有44 100 149 202 210
而dataframe1(也就是first_three_date)裡面不是有0~104
首先你進行了concat,
py跟first_theee_date跟first_three_date 三表結合
你的difference1,ID按照順序會變成,44 100 149 202 210 0~104 0~104(這邊還沒drop喔)
然後你資料合併後進行了drop_duplicates(keep=False)
首先keep可以輸入三種參數分別是'first'、'last'、False
'first':可以刪除重複資料,保留第一次
'last':可以刪除重複資料,保留最後一次
False:所有重複的資料都刪除,因為你用了他,difference1不會有0~104 只會剩下 149 202 210
所以difference1,ID會變成149 202 210
為什麼會造成差集的效果?
因為A差集B其實就是 A聯集B 扣掉 A交集B 再扣掉 (B扣掉A交集B)(很饒口對吧,往下說明)
那你有沒有發現 你進行concat的時候就是進行聯集,那因為drop_duplicates(keep=False)有清除掉所有重複項的效果,而你把py跟first_three_date進行concat,所以就達到A交集B的效果,那問題在於剩下的B怎麼辦?只好再concat一次first_three_date讓剩下的資料重複,drop_duplicates(keep=False)就可以清掉重複的資料
那difference2也是一樣的道理,就不說明ㄌ~