如何在特定条件下获得 pandas 数据框的笛卡尔积
How to get the cartesian product of a pandas dataframe under certain condition
给定一个数据框:
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左右,有没有人可以比较高效的解决这个问题?
一种方法是使用 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
给定一个数据框:
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左右,有没有人可以比较高效的解决这个问题?
一种方法是使用 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