我正在尝试将2d数据帧列表转换为一个大数据帧。假设我有以下示例,在该示例中,我创建了一组数据框,每个数据框具有相同的列/索引:
import pandas as pd
import numpy as np
frames = []
names = []
frame_columns = ['DataPoint1', 'DataPoint2']
for i in range(5):
names.append("DataSet{0}".format(i))
frames.append(pd.DataFrame(np.random.randn(3, 2), columns=frame_columns))
我想将这组数据帧转换为一个数据帧df
,我可以使用df['DataSet0']['DataPoint1']
访问它。
此数据集将必须具有由['DataPoint1', 'DataPoint2']
与各个数据帧的索引的乘积组成的多索引(当然,对于所有各个帧都是相同的)。
相反,列将作为['Dataset0', ...]
和['DataPoint1', 'DataPoint2']
的乘积给出。
无论哪种情况,我都可以创建一个对应的MultiIndex
并基于此派生一个(空)数据框:
mux = pd.MultiIndex.from_product([names, frames[0].columns])
frame = pd.DataFrame(index=mux).T
但是,我想显示数据框的内容,而不必添加它们。
请注意,this也曾问过类似的问题。但是,答案似乎与Panel
类有关,到目前为止,该类已被弃用。
同样,{{3}}线程建议加入,这并不是我真正需要的。
答案 0 :(得分:3)
IIUC,您可以将concat
与keys
一起使用:
total_frame = pd.concat(frames, keys=names)
输出:
DataPoint1 DataPoint2
DataSet0 0 -0.656758 1.776027
1 -0.940759 1.355495
2 0.173670 0.274525
DataSet1 0 -0.744456 -1.057482
1 0.186901 0.806281
2 0.148567 -1.065477
DataSet2 0 -0.980312 -0.487479
1 2.117227 -0.511628
2 0.093718 -0.514379
DataSet3 0 0.046963 -0.563041
1 -0.663800 -1.130751
2 -1.446891 0.879479
DataSet4 0 1.586213 1.552048
1 0.196841 1.933362
2 -0.545256 0.387289
然后您可以通过以下方式提取Dataset0
:
total_frame.loc['DataSet0']
如果您确实想使用MultiIndex列,则可以将axis=1
添加到concat:
total_frame = pd.concat(frames, axis=1, keys=names)