最近需要生成笛卡尔集,稍微看了一下,网上没有特别好的办法,后来自己想到了一个办法觉得还不错,分享一下。
主要的想法是将两个DataFrame建立一个共同的列,赋予同样的值,然后进行左连接就可以了。代码示例如下:
#导入pandas包
import pandas as pd
#构造两个数据集,用来生成笛卡尔集
df1=pd.DataFrame({'col1':['a','b','c'],'col2':['d','e','f']})
df2=pd.DataFrame({'v1':[1,2,3,4]})
df1
Out[4]:
col1 col2
0 a d
1 b e
2 c f
df2
Out[5]:
v1
0 1
1 2
2 3
3 4
#构造共同的列,赋予同样的值
df1['value']=1
df2['value']=1
#将两个数据集进行左连接
Crt_prod=pd.merge(df1,df2,how='left',on='value')
Crt_prod
Out[8]:
col1 col2 value v1
0 a d 1 1
1 a d 1 2
2 a d 1 3
3 a d 1 4
4 b e 1 1
5 b e 1 2
6 b e 1 3
7 b e 1 4
8 c f 1 1
9 c f 1 2
10 c f 1 3
11 c f 1 4
#删掉构造的列
del Crt_prod['value']
#最终结果
Crt_prod
Out[10]:
col1 col2 v1
0 a d 1
1 a d 2
2 a d 3
3 a d 4
4 b e 1
5 b e 2
6 b e 3
7 b e 4
8 c f 1
9 c f 2
10 c f 3
11 c f 4