如何用Pandas将含ID列的DataFrame与另一DataFrame生成全组合DataFrame
问题
现有含ID列的DataFrame(df1)和另一个DataFrame(df2),需将二者合并为保留ID列的全组合结果DataFrame。
df1结构:
ID name.x 1 a 2 b 3 c
df2结构:
name.y l m
数据创建代码:
import pandas as pd df1 = pd.DataFrame({'ID':[1,2,3],'name.x':['a','b','c']}) df2 = pd.DataFrame({'name.y':['l','m']})
期望结果:
ID name.x name.y 1 a l 1 a m 2 b l 2 b m 3 c l 3 c m
解决方案
要实现两个DataFrame的全组合(笛卡尔积)合并,直接使用Pandas的merge方法并指定how='cross'即可,该方式会自动生成两个DataFrame所有行的组合,同时保留原有的全部列(此方法要求Pandas版本≥1.2.0)。
实现代码:
result_df = df1.merge(df2, how='cross') print(result_df)
运行结果:
ID name.x name.y 0 1 a l 1 1 a m 2 2 b l 3 2 b m 4 3 c l 5 3 c m
若你的Pandas版本低于1.2.0,可通过临时添加相同列的方式实现交叉合并:
# 添加临时列用于关联 df1['temp'] = 1 df2['temp'] = 1 # 合并后删除临时列 result_df = df1.merge(df2, on='temp').drop('temp', axis=1) # 清理原DataFrame的临时列 df1.drop('temp', axis=1, inplace=True) df2.drop('temp', axis=1, inplace=True)
内容的提问来源于stack exchange,提问作者Benjamin
相关产品推荐
相关产品推荐

