如何将单个DataFrame的值映射至其他DataFrame并生成指定输出
Pandas实现DataFrame全量值映射(笛卡尔积)
问题本质
你需要将左表的每一行与右表的所有行进行组合,也就是生成两个DataFrame的笛卡尔积,这是多表组合场景中常见的需求。
方法1:通过虚拟键实现全连接
给两个DataFrame添加临时的相同键列,基于该列执行全连接后删除临时列:
import pandas as pd df_left = pd.DataFrame({ "Id": [1, 2, 3], "Value": ["A", "B", "C"] }) df_right = pd.DataFrame({ "IdDate": [101, 201, 301, 401, 501], }) # 添加临时虚拟键 df_left['temp_key'] = 1 df_right['temp_key'] = 1 # 执行全连接并移除临时列 result = df_left.merge(df_right, on='temp_key').drop('temp_key', axis=1)
方法2:使用merge的how='cross'参数(推荐,Pandas 1.2.0+)
Pandas 1.2.0及以上版本提供了更简洁的方式,无需额外添加虚拟键即可直接生成笛卡尔积:
import pandas as pd df_left = pd.DataFrame({ "Id": [1, 2, 3], "Value": ["A", "B", "C"] }) df_right = pd.DataFrame({ "IdDate": [101, 201, 301, 401, 501], }) result = df_left.merge(df_right, how='cross')
结果验证
两种方法生成的result结构与你指定的output完全一致,输出如下:
Id Value IdDate 0 1 A 101 1 1 A 201 2 1 A 301 3 1 A 401 4 1 A 501 5 2 B 101 6 2 B 201 7 2 B 301 8 2 B 401 9 2 B 501 10 3 C 101 11 3 C 201 12 3 C 301 13 3 C 401 14 3 C 501
内容的提问来源于stack exchange,提问作者Hussain Madarwala
相关产品推荐
相关产品推荐

