代码之家  ›  专栏  ›  技术社区  ›  Oblomov

基于行索引的不相交子帧分割

  •  1
  • Oblomov  · 技术社区  · 5 年前

    如何拆分数据帧

    import pandas as pd
    import numpy as np
    np.random.seed(0)
    df = pd.DataFrame({'first':np.random.rand(4),'second':np.random.rand(4)},index=['foo','bar','baz','bat'])
    print(df)
            first    second
    foo  0.548814  0.423655
    bar  0.715189  0.645894
    baz  0.602763  0.437587
    bat  0.544883  0.891773
    

    进入下面两个不相交的数据帧

            first    second
    foo  0.548814  0.423655
    bar  0.715189  0.645894
    
         first    second
    baz  0.602763  0.437587
    bat  0.544883  0.891773
    

    使用第一个数据帧的索引?

    我特别想找一种方法

    subDf1,subDf2 = pd.split(df,['foo','bar'])
    

    在哪里?

    print(subDf1)
       first    second
    foo  0.548814  0.423655
    bar  0.715189  0.645894
    

    print(subDf2 )
      first    second
    baz  0.602763  0.437587
    bat  0.544883  0.891773
    
    1 回复  |  直到 5 年前
        1
  •  0
  •   jezrael    5 年前

    我相信你可以用 Index.isin 具有 boolean indexing 第二次 DataFrame 以下内容:

    idx = ['foo','bar']
    
    print (df.loc[idx])
            first    second
    foo  0.548814  0.423655
    bar  0.715189  0.645894
    
    print (df[~df.index.isin(idx)])
            first    second
    baz  0.602763  0.437587
    bat  0.544883  0.891773
    

    或者 Index.difference 具有 DataFrame.loc 按标签选择:

    print (df.loc[df.index.difference(idx)])
            first    second
    bat  0.544883  0.891773
    baz  0.602763  0.437587