代码之家  ›  专栏  ›  技术社区  ›  Jayendra Parmar

如何将负指数与熊猫多指数结合使用?

  •  1
  • Jayendra Parmar  · 技术社区  · 7 年前

    我正在创建一个包含多索引的熊猫数据帧,方法如下

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame(columns=['time','features','A','B','C'])
    
    df['time'] = np.repeat(np.arange(5), 3)
    df['features'] = np.tile(['p','q','r'],5)
    df[['A','B','C']] = np.random.rand(15,3)
    
    df = df.set_index(['time','features'])
    

    看起来像这样

    print(df)
    
                     A         B         C
    time features                              
    0    p         0.177568  0.960215  0.846926
         q         0.664585  0.539106  0.978313
         r         0.558021  0.695074  0.875075
    1    p         0.402879  0.210938  0.892944
         q         0.908289  0.470084  0.132018
         r         0.433328  0.339444  0.812464
    2    p         0.559681  0.121496  0.390474
         q         0.255349  0.951172  0.925202
         r         0.207428  0.517507  0.799284
    3    p         0.547650  0.115945  0.283236
         q         0.077061  0.604040  0.131754
         r         0.756067  0.770017  0.878808
    4    p         0.057454  0.061359  0.423341
         q         0.726294  0.401679  0.023117
         r         0.391882  0.700574  0.280084
    

    对于这种情况

    print(df.loc[3:4])
    
                          A         B         C
    time features                              
    3    p         0.547650  0.115945  0.283236
         q         0.077061  0.604040  0.131754
         r         0.756067  0.770017  0.878808
    4    p         0.057454  0.061359  0.423341
         q         0.726294  0.401679  0.023117
         r         0.391882  0.700574  0.280084
    

    有效,但两者都没有 df[-2:] 也不 df.loc[-2:] 作品 如何获取带有负索引的多索引数据帧的最后n行?

    2 回复  |  直到 7 年前
        1
  •  1
  •   jezrael    7 年前

    使用 Index.get_level_values 对于第一级的值 MultiIndex ,删除重复项 Index.drop_duplicates ,索引和上次选择依据 loc :

    vals = df.index.get_level_values(0).drop_duplicates()[-2:]
    df = df.loc[vals]
    print (df)
                          A         B         C
    time features                              
    3    p         0.857103  0.200212  0.134633
         q         0.213594  0.973156  0.858330
         r         0.533785  0.434459  0.187193
    4    p         0.288276  0.627167  0.355706
         q         0.729455  0.556988  0.942390
         r         0.153546  0.896226  0.178035
    
        2
  •  0
  •   cocoafan    7 年前

    loc 实际需要的是数据帧索引而不是整数。因此,3、4是有效的索引值,但-2不是。你可以使用 index 获取索引并将其用于 洛克 .

    >>> df.loc[df.index[-6:]]
                          A         B         C
    time features                              
    3    p         0.615915  0.255448  0.832170
         q         0.791056  0.275615  0.639269
         r         0.612426  0.362504  0.459602
    4    p         0.238443  0.018668  0.982903
         q         0.261617  0.167528  0.401882
         r         0.391642  0.806504  0.121992