python join 的用法例子_Python pandas join 交叉连接(cross join)的使用及示例代码

两个示例的DataFrame:left = pd.DataFrame({'col1' : ['A', 'B', 'C'], 'col2' : [1, 2, 3]})

right = pd.DataFrame({'col1' : ['X', 'Y', 'Z'], 'col2' : [20, 30, 50]})

left

col1 col2

0 A 1

1 B 2

2 C 3

right

col1 col2

0 X 20

1 Y 30

2 Z 50

实现交叉连接(cross join)后的效果:A 1 X 20

A 1 Y 30

A 1 Z 50

B 2 X 20

B 2 Y 30

B 2 Z 50

C 3 X 20

C 3 Y 30

C 3 Z 50

1、使用临时“key”列实现def cartesian_product_basic(left, right):

return (

left.assign(key=1).merge(right.assign(key=1), on='key').drop('key', 1))

cartesian_product_basic(left, right)

col1_x col2_x col1_y col2_y

0 A 1 X 20

1 A 1 Y 30

2 A 1 Z 50

3 B 2 X 20

4 B 2 Y 30

5 B 2 Z 50

6 C 3 X 20

7 C 3 Y 30

8 C 3 Z 50

2、使用itertools product实现import itertools

l=list(itertools.product(left.values.tolist(),right.values.tolist()))

pd.DataFrame(list(map(lambda x : sum(x,[]),l)))

0 1 2 3

0 A 1 X 20

1 A 1 Y 30

2 A 1 Z 50

3 B 2 X 20

4 B 2 Y 30

5 B 2 Z 50

6 C 3 X 20

7 C 3 Y 30

8 C 3 Z 50

3、使用pandas concat方法实现m = pd.concat([pd.concat([left]*len(right)).sort_index().reset_index(drop=True),

pd.concat([right]*len(left)).reset_index(drop=True) ], 1)

col1 col2 col1 col2

0 A 1 X 20

1 A 1 Y 30

2 A 1 Z 50

3 B 2 X 20

4 B 2 Y 30

5 B 2 Z 50

6 C 3 X 20

7 C 3 Y 30

8 C 3 Z 50

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值