如何基于两个多索引列Pandas DataFrame生成全组合新表
优化后问题表述
给定两个行数相等、且均带有多级列索引的Pandas DataFrame,需按如下规则生成两个新的结果表:
- 左结果表:原左表的每一列按右表的总列数重复,保留原列的多级索引结构,最终列数等于两原表列数的乘积
- 右结果表:原右表的完整列集合按左表的总列数重复,保留原列的多级索引结构,最终列数和左结果表一致
示例参考
输入构造代码
import pandas as pd left = pd.DataFrame(([1,0,1], [1,0,0],[1,0,1],), columns=pd.MultiIndex.from_tuples([('A', 'B'), ('A', 'C' ), ('D','D'),])) right = pd.DataFrame(([8,9], [8,9],[8,9],), columns=pd.MultiIndex.from_tuples([('S', 'T'), ('Y', 'Z'),]))
原left表样例
A A D B C D 0 1 0 1 1 1 0 0 2 1 0 1
原right表样例
S Y T Z 0 8 9 1 8 9 2 8 9
预期输出
left_result
A A A A D D B B C C D D 0 1 1 0 0 1 1 1 1 1 0 0 0 0 2 1 1 0 0 1 1
right_result
S Y S Y S Y T Z T Z T Z 0 8 9 8 9 8 9 1 8 9 8 9 8 9 2 8 9 8 9 8 9
实现代码
# 获取两个原表的列数 n_left_col = left.shape[1] n_right_col = right.shape[1] # 生成左结果表:每列重复右表列数次 left_result = left.repeat(n_right_col, axis=1) # 生成右结果表:完整列集合重复左表列数次 right_result = pd.concat([right]*n_left_col, axis=1)
内容的提问来源于stack exchange,提问作者krema
相关产品推荐
相关产品推荐

