代码之家  ›  专栏  ›  技术社区  ›  Jeremy K.

在“unstack”和“set\u index”之后切片`

  •  -1
  • Jeremy K.  · 技术社区  · 6 年前

    unstack .

    我的纵向/面板数据集 longfile 下表(数据输入代码在问题下方)。

        time x  y
    USA 1    5  10
    USA 2    5  12
    USA 3    6  13
    CAN 1    2  2
    CAN 2    2  3
    CAN 3    4  5
    

    那么我 将数据转换为 widefile ,按时间索引,如下所示:

    df1 = df.reset_index().set_index(['time','index']).unstack(-1)
    print(df1)
    

            x       y    
    index CAN USA CAN USA
    time                 
    1       2   5   2  10
    2       2   5   3  12
    3       4   6   5  13
    

    我现在想把文件切掉, df1

    • train 包含 t==1 t==2
    • test 包含 t==3 .

    我试过了:

    train = df1[(df.time=='1')|(df.time=='2')]
    

    还有这个:

    train = df1[(df.time==1)|(df.time==2)]
    

    但两者都会出错。

    火车

            x       y    
    index CAN USA CAN USA
    time                 
    1       2   5   2  10
    2       2   5   3  12
    

            x       y    
    index CAN USA CAN USA
    time                 
    3       4   6   5  13
    

    数据输入代码

    import numpy as np
    import pandas as pd
    
    data = np.array([['country','time','x','y'],
                    ['USA',1, 5, 10],
                    ['USA',2, 5, 12],
                    ['USA',3,6, 13],
                    ['CAN',1,2, 2],
                    ['CAN',2,2, 3],
                    ['CAN',3,4, 5]],                
                   )
                    
    df = pd.DataFrame(data=data[1:,1:],
                      index=data[1:,0],
                      columns=data[0,1:])
    
    df
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   BENY    6 年前

    首先 time 是 index 不再列了,我们需要使用 .index ,第二,你需要使用 df1 不 df

    train = df1[df1.index.isin([1,2])]
    train
    Out[219]: 
            x       y    
    index CAN USA CAN USA
    time                 
    1       2   5   2  10
    2       2   5   3  12