解密大数据

多级嵌套 DataFrame 操作 - Daily Python

2017-08-11  本文已影响143人  张利东

首发于微信公众号东哥夜谈。欢迎关注东哥夜谈,让我们一起聊聊个人成长、投资、编程、电影、运动等话题。
本帐号所有文章均为原创。文章可以随意转载,但请务必注明作者。如果觉得文章有用,欢迎转发朋友圈分享。


1. 缘起

多级索引(Hierarchical Index)的表格在我看来并不是一个好的表格。虽然给人的体验很好,但对机体验很不好,所以应该尽量避免。但处理外部数据的时候却总会遇到,比如描述统计量的杀手级武器 describe(),其返回结果就是一个多级索引的 DataFrame。所以还是得研究一下。

2. 多级索引表格操作

多级索引表格的 index 是一个 MultiIndex 对象。MultiIndex的对象可以看成是一组由不同级级构成的一组 Tuple,可以用常见的方法索引之。很多函数中也会有level 选项,对应的就是这里的级级。比如df.sum(level='LC',axis=1)

有时候需要对一个多级索引表格进行过滤,原先那种简单过滤只适应于单层索引。对于多级索引,需要用到xs方法。

DataFrame.xs(key, axis=0, level=None, drop_level=True)

Returns a cross-section (row(s) or column(s)) from the Series/DataFrame. Defaults to cross-section on the rows (axis=0).

比如要索引所有节点的均值,就可以用dmean = df.xs('mean', axis=0, level=1)这种方法。

3. 扁平化多级索引

还是不是很喜欢多级索引……所以不妨将其改变之,比如变成单级索引。就比如对 STAAD Pro计算结果进行 describe 之后的结果

            Absmm        Xmm        Ymm        Zmm
Node   item                                                
269.0  count  2.600000e+01  26.000000  26.000000  26.000000
    mean  -5.150000e-02   0.005423   0.027385  -0.057077
    std    9.984077e-02   0.012113   0.076432   0.090868
    min   -2.820000e-01  -0.014000  -0.012000  -0.265000
    25%   -7.250000e-02  -0.000750  -0.001750  -0.072250
    50%   -8.000000e-03   0.005000   0.000000  -0.013500
    75%    6.750000e-03   0.009750   0.012500   0.002500
    max    6.600000e-02   0.048000   0.288000   0.052000

其实这个多级索引,只要把前面的第 0 级的 Node 补全了,就变成一个单级索引的常规表格了。最简单的办法,便是把索引变成普通的列了。于是有代码rsdiff = sdiff.reset_index()。一个reset_index,便可以把原来的索引变成普通列。这是在对rsdiff进行筛选之类就简单多了。比如可以用rmean = rsdiff[rsdiff.item == 'mean']这样的 filter 进行筛选。

个人还是更喜欢这种方式……

4. 来源


上一篇 下一篇

猜你喜欢

热点阅读