呈现分层数据的最佳方式 Python 熊猫



我读过关于熊猫多索引的文章,但我找到的例子没有涵盖这种情况:

我在 1..n 中有一组测量值 i。每个测量 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 值是否应该重复?还是每个测量的第一行 i 包含 a、b、c 的值,其他 2..m 行包含 NaN?

正如评论中提到的,这在很大程度上取决于您希望在一天结束时能够回答的问题类型。一个潜在有意义的表示示例,它利用数组在每行中具有相同长度的事实,是沿数组取乘积,重复第 $i$行$m_i$ 次;

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

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

最新更新