You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并df1与df2:为每条df1记录匹配df2全部Time值

实现DataFrame的全量交叉合并(笛卡尔积)

需求说明

将两个DataFrame(df1和df2)合并,使df1中的每条记录都对应df2的所有Time值,最终得到两者的笛卡尔积结果。

原始数据

df1:

Index Product     ID     Name
0     Cash        1234   Sam
1     Transfer    5678   Bill
2     Post        9101   Carry 

df2:

Index Time
0      0
1      13
2      14
3      92
4      184
5      365
6      1096
7      1826

期望输出

Index Product     ID     Name Time
0     Cash        1234   Sam   0
1     Cash        1234   Sam   13
2     Cash        1234   Sam   14
3     Cash        1234   Sam   92
4     Cash        1234   Sam   184
5     Cash        1234   Sam   365
6     Cash        1234   Sam   1096
7     Cash        1234   Sam   1826
8     Transfer    5678   Bill  0
9     Transfer    5678   Bill  13
10    Transfer    5678   Bill  14
11    Transfer    5678   Bill  92
12    Transfer    5678   Bill  184
13    Transfer    5678   Bill  365
14    Transfer    5678   Bill  1096
15    Transfer    5678   Bill  1826
16    Post        9101   Carry 0
17    Post        9101   Carry 13
18    Post        9101   Carry 14
19    Post        9101   Carry 92
20    Post        9101   Carry 184
21    Post        9101   Carry 365
22    Post        9101   Carry 1096
23    Post        9101   Carry 1826

解决方法

方法1:使用pd.merge的cross连接(推荐,pandas 1.2.0+可用)

pandas从1.2.0版本开始支持直接的交叉连接,一行代码就能实现笛卡尔积:

import pandas as pd

# 假设df1和df2已创建
result = pd.merge(df1, df2, how='cross')

方法2:添加辅助列实现合并(兼容低版本pandas)

如果你的pandas版本较低,无法使用cross连接,可以给两个DataFrame添加一个相同的临时列,再基于这个列做内连接,最后删除临时列:

import pandas as pd

# 添加临时辅助列
df1['temp_key'] = 1
df2['temp_key'] = 1

# 合并后删除临时列
result = pd.merge(df1, df2, on='temp_key').drop('temp_key', axis=1)

两种方法最终都会生成你需要的目标DataFrame。

内容的提问来源于stack exchange,提问作者SGC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 20:33:21