将 dict 转换为具有更高级别的数据帧
Posted
技术标签:
【中文标题】将 dict 转换为具有更高级别的数据帧【英文标题】:convert a dict to a dataframe with one more level 【发布时间】:2019-01-11 21:24:49 【问题描述】:我有一个字典,它的两个元素是两个具有相同索引和列名的数据框。就像下面的代码:
my_dict =
my_dict['df1'] = pd.DataFrame(np.arange(6).reshape(3,2),index = ['r1','r2','r3'],columns=['c1', 'c2'])
my_dict['df2'] = pd.DataFrame((np.arange(6)+10).reshape(3,2),index = ['r1','r2','r3'],columns=['c1', 'c2'])
my_dict['df1']
Out[1]:
c1 c2
r1 0 1
r2 2 3
r3 4 5
my_dict['df2']
Out[2]:
c1 c2
r1 10 11
r2 12 13
r3 14 15
如何将 dict 转换为一个数据帧。索引将保持与原始索引相同,但我为以下列增加了一层:
df1 df2
c1 c2 c1 c2
r1 0 1 10 11
r2 2 3 12 13
r3 4 5 14 15
【问题讨论】:
你试过这个答案了吗:***.com/questions/18262962/… Concatenate Pandas columns under new multi-index level的可能重复 如上链接建议,你可以试试pd.concat(my_dict.values(), axis=1, keys=my_dict.keys())
谢谢! @student 太好了。一个小问题,链接提到“应该避免以这种方式使用 d.values 和 d.keys,因为不能保证订单会得到维护”。你知道如何维护订单吗?
我在讨论后添加了答案,您可以检查它是否有效。
【参考方案1】:
你试过了吗:
df1=my_dict['df1']
df2=my_dict['df2']
df1.columns = [['df1']*df1.shape[1],df1.columns]
df2.columns = [['df2']*df2.shape[1],df2.columns]
df1.join(df2)
【讨论】:
谢谢。有用。但我认为学生的回答更适合我的情况,因为我必须在同一周内组合数百个数据框。 是的,学生打败了我!【参考方案2】:您可能需要类似于other answer 的东西。正如其他答案中的讨论指出的那样,仅使用pd.concat(my_dict.values(), axis=1, keys=my_dict.keys())
并不能保证.values()
和.keys()
的顺序相同。
因此,k, values = zip(*my_dict.items())
可用于保留订单并将它们与pd.concat
一起使用:
k, values = zip(*my_dict.items())
new_df = pd.concat(values, keys = k, axis=1)
【讨论】:
以上是关于将 dict 转换为具有更高级别的数据帧的主要内容,如果未能解决你的问题,请参考以下文章
如何在 mailchimp 中使用更高级别的 pygments 语法
将 dict 构造函数转换为 Pandas MultiIndex 数据帧