如何基于现有DataFrame生成所有元素排列组合的新DataFrame
实现方案
直接用pandas的笛卡尔积就能生成你要的所有有序两两组合,不需要手写循环,运行效率更高。
首先确认原始数据:假设你存储姓名的列名为name,原始DataFrame构造参考如下:
import pandas as pd df = pd.DataFrame({ 'name': ['John', 'Kelly', 'Jay', 'Max', 'Kert'] })
根据你使用的pandas版本,选择对应写法即可:
- pandas 1.2.0及以上版本,直接使用原生交叉连接(笛卡尔积)语法:
# 交叉连接生成所有有序两两配对 pair_df = df.merge(df, how='cross') # 拼接为下划线连接的目标格式 res = pd.DataFrame({ 'value': pair_df['name_x'] + '_' + pair_df['name_y'] })
- pandas版本低于1.2.0(不支持
how='cross'参数),通过添加临时公共键实现相同的笛卡尔积效果:
# 添加临时公共连接键 df['tmp_key'] = 1 pair_df = df.merge(df, on='tmp_key').drop(columns='tmp_key') # 拼接为目标格式 res = pd.DataFrame({ 'value': pair_df['name_x'] + '_' + pair_df['name_y'] })
最终生成的res就是符合要求的新DataFrame,总计25行数据,覆盖从John_John到Kert_Kert的全部有序组合,和你给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者Harshal Naik
相关产品推荐
相关产品推荐

