我有我想要使用的多索引数据框的结构(灵感来自文档)。我想用字典在每个级别实例化它。
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()
但没有成功。可以吗?
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