Pandas大数据集笛卡尔积(Cross Join)索引问题求助
带多层索引DataFrame的笛卡尔积实现方案
先把DataFrame的索引转成普通列,避免merge操作丢失索引信息:
# 将d1、d2的索引重置为列 d1_reset = d1.reset_index() d2_reset = d2.reset_index()筛选出参与笛卡尔积的核心字段,避免生成无关列:
# 仅保留Years、Days(来自d1)和Names(来自d2),同时去重减少计算量 d1_core = d1_reset[['Years', 'Days']].drop_duplicates() d2_core = d2_reset[['Names']].drop_duplicates()执行笛卡尔积合并:
cross_df = d1_core.merge(d2_core, how='cross')(可选)将结果还原为目标多层索引:
cross_df = cross_df.set_index(['Years', 'Days', 'Names'])
补充说明
如果原数据集还有需要保留的业务列,可以先通过上述步骤生成索引的笛卡尔积框架,再用merge或join关联原数据的列,既保证索引逻辑正确,又不会产生冗余列。
内容的提问来源于stack exchange,提问作者Michael W
相关产品推荐
相关产品推荐

