首页 > 解决方案 > 从两个现有数据框创建两个新数据框,同时考虑它们的多索引列及其值的所有组合

问题描述

我想从两个现有数据框创建两个新数据框,同时考虑到它们的多索引列及其值的所有组合。

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'),]))
剩下:
   A  A  D
   B  C  D
0  1  0  1
1  1  0  0
2  1  0  1
正确的:
   S  Y
   T  Z
0  8  9
1  8  9
2  8  9
预期产出
左结果:
   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
正确的结果:
   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

PS:对不起,如果我的问题不够精确,但是具有预期结果的示例仍然可以最好地解释它。也许这个问题已经被问到了,但是在没有准确描述我真正想要什么样的结果(两个 DataFrame 中的组合?)的情况下,我请你帮助更准确地制定问题或将其链接为重复如果存在一个现有问题。

标签: pythonpandasdataframecombinatorics

解决方案


在列上使用DataFrame.reindex+ ( )Index.repeataxis=1

# repeat 'left' columns 2 times 
>>> left = left.reindex(left.columns.repeat(2), axis=1)
>>> left

   A           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

# repeat 'right' columns 3 times 
>>> right = right.reindex(right.columns.repeat(3), axis=1)
>>> right 

   S        Y      
   T  T  T  Z  Z  Z
0  8  8  8  9  9  9
1  8  8  8  9  9  9
2  8  8  8  9  9  9

或者pandas.concat

# concatenate 'right' 3 times side by side (axis=1)
>>> right = pd.concat([right]*3, axis=1)
>>> right

   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


推荐阅读