2017-08-09 90 views
1

給出一個數據框下:如何獲得大熊貓數據框的笛卡爾積一定條件

qid cid title 
0 1 a croc 
1 2 b dog  
2 3 a fish 
3 4 b cat 
4 5 a bird 

我希望得到一個新的數據幀是每一行與具有相同對方行的笛卡爾積CID值,因爲它(即,讓所有具有相同的CID雙行):

cid1 cid2 qid1 title1 qid2 title2 
0 a  a 1 croc 3 fish 
1 a  a 1 croc 5 bird 
2 a  a 3 fish 5 bird 
3 b  b 2 dog  4 cat 

假設我的數據集是500M左右,有誰能夠在一個比較有效的方式解決這個問題?

回答

2

一種方法是使用self merge然後過濾掉所有不需要的記錄。

df.merge(df, on='cid', suffixes=('1','2')).query('qid1 < qid2') 

輸出:

qid1 cid title1 qid2 title2 
1  1 a croc  3 fish 
2  1 a croc  5 bird 
5  3 a fish  5 bird 
10  2 b dog  4 cat 
+1

那會產生大量的數據。雖然它是一個很好的答案+1 – Dark