呈现分层数据python pandas的最佳方式

时间:2017-11-09 15:45:51

标签: python pandas hierarchical-data

我读到了关于pandas multi index的内容,但我发现的例子并没有涵盖这种情况:

我在1..n中有一组测量值。每个测量i由属性a,b,c,X,Y,Z组成。而a,b,c具有标量值,X,Y,Z是阵列。 (X,Y,Z对于不同的测量具有不同的长度,但在一次测量i中,阵列X,Y,Z具有相同的长度m)。

问题:在熊猫数据框中表示这个的最好方法是什么?

我看到的多索引示例将索引数据,例如第一级由i表示测量,第二级由k表示索引为X,Y,Z。但是,对于每个测量只有一个值但不是m的属性a,b,c呢?是否应重复a,b,c值?或者只有每个测量的第一行包含a,b,c的值,其他2..m行包含NaN?

1 个答案:

答案 0 :(得分:0)

正如评论中所提到的,其中大部分将取决于您希望在一天结束时能够回答的问题。利用数据在每一行中具有相同长度的事实的可能有意义的表示的一个示例是沿着数组获取产品,重复$ i $ th行$ m_i $ times;

In [12]: from itertools import chain

In [13]: df = pd.DataFrame({'a': [5, 7, 1], 'b': [1, 3, 2], 'c': [10, 1, 1], 'X': [[10, 10], [10, 20, 30], [4, 5]], 'Y': [[20
    ...: , 30], [1, 4, 5], [0, 1]], 'Z': [[0, 3], [0, 1, 2], [50, 60]]})

In [14]: df
Out[14]:
              X          Y          Z  a  b   c
0      [10, 10]   [20, 30]     [0, 3]  5  1  10
1  [10, 20, 30]  [1, 4, 5]  [0, 1, 2]  7  3   1
2        [4, 5]     [0, 1]   [50, 60]  1  2   1

In [15]: pd.DataFrame({
    ...:     'a': np.repeat(df.a.values, df.X.apply(len)),
    ...:     'b': np.repeat(df.b.values, df.X.apply(len)),
    ...:     'c': np.repeat(df.c.values, df.X.apply(len)),
    ...:     'X': list(chain.from_iterable(df.X)),
    ...:     'Y': list(chain.from_iterable(df.Y)),
    ...:     'Z': list(chain.from_iterable(df.Z))})
    ...:
Out[15]:
    X   Y   Z  a  b   c
0  10  20   0  5  1  10
1  10  30   3  5  1  10
2  10   1   0  7  3   1
3  20   4   1  7  3   1
4  30   5   2  7  3   1
5   4   0  50  1  2   1
6   5   1  60  1  2   1

这假设数组长度与列匹配的事实意味着数组本身在元素方面是可比较的。