【问题标题】:python pandas multi-level indexing - adding new columnspython pandas多级索引 - 添加新列
【发布时间】:2018-06-10 01:02:00
【问题描述】:

我一直在使用面板来代替具有多级索引的数据框,因为它们对于大型数据集似乎更快。但我现在正在过渡到 Midx 框架。使用面板,我可以轻松做到这一点:

import pandas as pd
pan = pd.Panel(np.random.randn(3,5,2),items=['p1','p2','p3'],minor_axis=['a','b'])

然后添加一个新项目:

pan['p4'] = pd.DataFrame(np.random.randn(10,2),columns=['a','b'])

但使用 Midx:

cols = [['p1','p2','p3'],['a','b']]
idx = pd.MultiIndex.from_product(cols)
df_midx = pd.DataFrame(np.random.randn(10,6),columns=idx)

这会返回一个错误:

df_midx['p4'] = pd.DataFrame(np.random.randn(10,2),columns=['a','b'])

ValueError: 传递的项目数错误 2,位置暗示 1

【问题讨论】:

    标签: python pandas dataframe multi-index


    【解决方案1】:

    您可以使用concat,因为您正在尝试分配数据框并且您有多级列,即

    第 1 步:将数据框设为多级列数据框

    samp = pd.DataFrame(pd.np.random.randn(10,2),columns=['a','b'])
    p4 = pd.concat([samp], keys=['p4'],axis=1) 
    

    或者:

    new_idx = pd.MultiIndex.from_product([['p4'],['a','b']])
    p4 = pd.DataFrame(pd.np.random.randn(10,2),columns=new_idx)
    

    Step2:连接两个数据框

    ndf = pd.concat([df_midx,p4] ,axis=1)
    
            p1                  p2                  p3                  p4  \
              a         b         a         b         a         b         a   
    0 -0.345972 -0.091595  1.524982 -1.181117 -1.288529 -1.295967  0.199311   
    1 -0.398007  0.805862  0.109550  0.449695  0.342036  0.516858  1.128231   
    2 -1.141256  0.614402  1.512875 -1.469454  0.637108 -0.413336 -1.483573   
    3 -0.018409  0.842007  0.170275  1.731468  0.022853 -1.665722 -1.174225   
    4 -0.407416  0.635482 -0.486413  0.090096  0.489290 -1.704067 -2.228681   
    5  0.283725 -1.314413  0.382782 -1.139884  0.607638 -1.682241  1.479211   
    6  0.369212  0.378822 -0.714765 -0.796454  0.840744  1.399895 -1.204143   
    7  1.214798 -0.134845  1.274823 -0.319794  1.658468  1.442076 -2.118546   
    8  0.305107 -1.649617 -0.424912  1.520576 -1.285289  0.476907 -1.104102   
    9  1.175882 -1.677547 -0.842787 -0.585976  0.046749 -0.369360 -1.339593   
    
    
              b  
    0 -0.438747  
    1  0.395792  
    2  0.561690  
    3 -0.739772  
    4  0.745308  
    5  0.734140  
    6  0.112849  
    7  0.314292  
    8  2.363909  
    9 -1.741678  
    

    【讨论】:

    • ty 黑暗。 p4 = pd.concat([samp], keys=['p4'],axis=1) 的目的是什么?有没有办法结合到ndf步骤?
    猜你喜欢
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 2017-03-04
    • 1970-01-01
    • 2014-09-27
    相关资源
    最近更新 更多