如何合并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
相关产品推荐
相关产品推荐

