Python Pandas - 重复字典以适应多索引数据框

问题描述 投票:0回答:1

我有我想要使用的多索引数据框的结构(灵感来自文档)。我想用字典在每个级别实例化它。

MultiIndex Dataframe 总体结构:

import pandas as pd

def mklbl(prefix, n):
    return ["%s%s" % (prefix, i) for i in range(n)]

miindex = pd.MultiIndex.from_product(
    [mklbl("X", 2), mklbl("Y", 2), mklbl("Z", 2)]
)

columns = ['A', 'B', 'C']

dfmi = (
    pd.DataFrame(
        # Code below from the documentation. To replace??
        # np.arange(len(miindex) * len(columns)).reshape(
        #   (len(miindex), len(columns))
        ),
        index=miindex,
        columns=columns,
    )
    .sort_index()
    .sort_index(axis=1)
)

我希望通过多次重复以下字典来替换上面注释的代码,该字典适合 MultiIndex,

my_dict = {'A': [False, False, True, True], 
           'B': [False, True, False, True], 
           'C': [0, 0, 0, 0]}

这样我就得到了最终结果:

               A       B   C
X0 Y0 Z0   False   False   0
           False   True    0
           True    False   0
           True    True    0
      Z1   False   False   0
           False   True    0
           True    False   0
           True    True    0
   Y1 Z0   False   False   0
           False   True    0
           True    False   0
           True    True    0
      Z1   False   False   0
           False   True    0
           True    False   0
           True    True    0
X1 Y0 Z0   False   False   0
           False   True    0
           True    False   0
           True    True    0
      Z1   False   False   0
           False   True    0
           True    False   0
           True    True    0
   Y1 Z0   False   False   0
           False   True    0
           True    False   0
           True    True    0
      Z1   False   False   0
           False   True    0
           True    False   0
           True    True    0

我尝试使用

pd.concat()
但没有成功。可以吗?

python python-3.x pandas dictionary multi-index
1个回答
0
投票

您可以组合

concat
itertools.product
:

from itertools import product

prod = product(mklbl("X", 2), mklbl("Y", 2), mklbl("Z", 2))

tmp = pd.DataFrame(my_dict)

out = pd.concat({p: tmp for p in prod})

输出:

                A      B  C
X0 Y0 Z0 0  False  False  0
         1  False   True  0
         2   True  False  0
         3   True   True  0
      Z1 0  False  False  0
         1  False   True  0
         2   True  False  0
         3   True   True  0
   Y1 Z0 0  False  False  0
         1  False   True  0
         2   True  False  0
         3   True   True  0
      Z1 0  False  False  0
         1  False   True  0
         2   True  False  0
         3   True   True  0
X1 Y0 Z0 0  False  False  0
         1  False   True  0
         2   True  False  0
         3   True   True  0
      Z1 0  False  False  0
         1  False   True  0
         2   True  False  0
         3   True   True  0
   Y1 Z0 0  False  False  0
         1  False   True  0
         2   True  False  0
         3   True   True  0
      Z1 0  False  False  0
         1  False   True  0
         2   True  False  0
         3   True   True  0
© www.soinside.com 2019 - 2024. All rights reserved.