pandas 生成笛卡尔集

最近需要生成笛卡尔集,稍微看了一下,网上没有特别好的办法,后来自己想到了一个办法觉得还不错,分享一下。

主要的想法是将两个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

 


  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值