代码之家  ›  专栏  ›  技术社区  ›  U13-Forward

按一列上的另一列对数据帧进行排序-熊猫

  •  1
  • U13-Forward  · 技术社区  · 6 年前

    假设我必须创建数据帧,如下所示:

    df=pd.DataFrame({'a':[1,4,3,2],'b':[1,2,3,4]})
    df2=pd.DataFrame({'a':[1,2,3,4],'b':[1,2,3,4],'c':[34,56,7,55]})
    

    我想分类 df 按订单提供数据 df2 'a' 列,所以 df.a 列的顺序为 df2.a 这使得整个数据帧的顺序。

       a  b
    0  1  1
    1  2  4
    2  3  3
    3  4  2
    

    (手工制作,如果有错误,请告诉我:D)

    我自己的尝试:

    df = df.set_index('a')
    df = df.reindex(index=df2['a'])
    df = df.reset_index()
    print(df)
    

    工作如期!!!,

    df=pd.DataFrame({'a':[1,4,3,2,3,4,5,3,5,6],'b':[1,2,3,4,5,5,5,6,6,7]})
    df2=pd.DataFrame({'a':[1,2,3,4,3,4,5,6,4,5],'b':[1,2,4,3,4,5,6,7,4,3]})
    

    这没用。

    注:我不仅想解释原因,还需要一个解决方案来解决大数据框架的问题

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

    一种可能的解决方案是在这两个字段中创建帮助器列 DataFrame

    df['g'] = df.groupby('a').cumcount()
    df2['g'] = df2.groupby('a').cumcount()
    
    df = df.set_index(['a','g']).reindex(index=df2.set_index(['a','g']).index)
    print(df)
           b
    a g     
    1 0  1.0
    2 0  4.0
    3 0  3.0
    4 0  2.0
    3 1  5.0
    4 1  5.0
    5 0  5.0
    6 0  7.0
    4 2  NaN
    5 1  6.0
    

    merge :

    df3 = df.merge(df2[['a','g']], on=['a','g'])
    print(df3)
       a  b  g
    0  1  1  0
    1  4  2  0
    2  3  3  0
    3  2  4  0
    4  3  5  1
    5  4  5  1
    6  5  5  0
    7  5  6  1
    8  6  7  0