考虑以下面板:
data = np.random.randint(1, 10, (5, 3, 2))pnl = pd.Panel( data, items=['item {}'.format(i) for i in range(1, 6)], major_axis=[2015, 2016, 2017], minor_axis=['US', 'UK'])
如果将其转换为Dataframe,它将变为:
item 1 item 2 item 3 item 4 item 5major minor 2015 US 9 6 3 2 5 UK 8 3 7 7 92016 US 7 7 8 7 5 UK 9 1 9 9 12017 US 1 8 1 3 1 UK 6 8 8 1 6
因此,它将长轴和短轴作为行MultiIndex,将项目作为列。形状变为原来的(5,3,2)(6,5)。由您决定在哪里使用MultiIndex,但是如果您想要完全相同的形状,则可以执行以下 *** 作:
data = data.reshape(5, 6).Tdf = pd.Dataframe( data=data, index=pd.MultiIndex.from_product([[2015, 2016, 2017], ['US', 'UK']]), columns=['item {}'.format(i) for i in range(1, 6)])
产生相同的Dataframe(如果要命名索引,请使用
names参数
pd.MultiIndex.from_product):
item 1 item 2 item 3 item 4 item 52015 US 9 6 3 2 5 UK 8 3 7 7 92016 US 7 7 8 7 5 UK 9 1 9 9 12017 US 1 8 1 3 1 UK 6 8 8 1 6
现在
pnl['item1 1'],您可以使用,而不是,
df['item 1'](可选
df['item1'].unstack());而不是
pnl.xs(2015)使用
df.xs(2015)和替代
pnl.xs('US',axis='minor'),您可以使用
df.xs('US', level=1)。
如您所见,这只是将您最初的3D numpy数组重塑为2D的问题。您可以在MultiIndex的帮助下添加其他(人工)维度。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)