如何重复字典数据适配Pandas多级索引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)] ) my_dict = {'A': [False, False, True, True], 'B': [False, True, False, True], 'C': [0, 0, 0, 0]} # 1. 先把字典转为基础DataFrame df_base = pd.DataFrame(my_dict) # 2. 计算需要重复的次数(即多级索引的条目数) repeat_times = len(miindex) # 3. 重复基础数据,并构造对应重复的多级索引 df_repeated = pd.concat([df_base]*repeat_times, ignore_index=True) new_index = pd.MultiIndex.from_tuples( [idx for idx in miindex for _ in range(len(df_base))] ) # 4. 赋值索引并排序 dfmi = ( pd.DataFrame(df_repeated.values, index=new_index, columns=my_dict.keys()) .sort_index() .sort_index(axis=1) ) print(dfmi)
为什么你之前用pd.concat没成功?
大概率是没同步处理多级索引的重复映射——只重复了数据,但没把每个多级索引条目对应重复4次,导致索引和数据行数不匹配,或者索引结构不符合预期。
另外也可以用更简洁的方式,利用numpy.tile来重复数组:
import numpy as np # 用tile重复数据数组 data = np.tile(np.array(list(my_dict.values())).T, (len(miindex), 1)) new_index = pd.MultiIndex.from_tuples( [idx for idx in miindex for _ in range(len(my_dict['A']))] ) dfmi = ( pd.DataFrame(data, index=new_index, columns=my_dict.keys()) .sort_index() .sort_index(axis=1) )
两种方式都能得到你期望的输出结果。
内容的提问来源于stack exchange,提问作者Aster
相关产品推荐
相关产品推荐

