在pandas中连接具有不同主要索引的面板

时间:2014-07-24 13:24:46

标签: python pandas

我有一个存储在数据框中的测量集,如下所示:

time cname c1 c2 c3
  1         0  1  2
  2         3  4  5
  3         6  7  8
  4         9 10 11

其中每个col是不同的测量信号。每个集合都是在某个参数值(比如温度)下测量的,但每个集合的时间索引也不同(尽管它具有相同的长度。

多索引数据帧的问题是你需要设置如此多的时间级别作为你拥有的数量,所以它变得非常脏。因此,我已经开始使用Panels,因此每个DataFrame都包含"包含"在一个项目中。

现在的问题是如何连接那些维护不同时间索引的数据帧(在这种情况下为major_index)。换句话说,我有这个:

pn1 = pd.Panel(randn(1,3,3), items=['a'], major_axis=[1,2,3], minor_axis=['c1','c2','c3'])
pn2 = pd.Panel(randn(1,3,3), items=['d'], major_axis=[3,4,5], minor_axis=['c1','c2','c3'])
pn = pd.concat([pn1,pn2], axis=0)

pn['a']
Out[24]: 
         c1        c2        c3
1  1.110590 -0.937210  0.220479
2  0.583298 -0.255046  2.068040
3 -1.231154 -1.338226  1.308702
4       NaN       NaN       NaN
5       NaN       NaN       NaN

但我希望每个项目都能保留其原始的major_index。我该怎么办?有没有更好的方法来使用Dataframes组织这些数据?

1 个答案:

答案 0 :(得分:0)

这似乎是一个自然的问题,使用多级索引(索引是你拥有的items / major_axis)和列作为minor_axis。这些级别不必完全填充。

In [16]: df1 = pn1.transpose('minor_axis','items','major_axis').to_frame()

In [17]: df2 = pn2.transpose('minor_axis','items','major_axis').to_frame()

In [18]: concat([df1,df2])
Out[18]: 
                   c1        c2        c3
major minor                              
a     1     -1.202766 -0.502679  1.915304
      2      0.097658  0.604051 -0.497243
      3     -1.285027 -1.200143  0.087209
d     3     -0.231444  1.518543  2.139600
      4     -1.336436 -0.299769 -0.600134
      5     -1.193389  1.449733 -0.857263