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

python:concat 2数据帧,将其名称保留为新列

  •  3
  • agenis  · 技术社区  · 6 年前

    我在找一种像蟒蛇一样的方法 bind_rows ( dplyr 在r中的包),它从data.frames列表中进行数据帧连接,并自动将每个data.frame的名称添加为 .id 要记住行从何而来的列。

    有什么简单的方法可以做到这一点吗?我试着用 pd.concat :

    df1 = pd.DataFrame([['a', 1], ['b', 2]], columns=['letter', 'number'])
    df2 = df1.copy()
    pd.concat([df1, df2])
    

    预期产量:

    ####     .id letter  number
    #### 0   df1      a       1
    #### 1   df1      b       2
    #### 0   df2      a       1
    #### 1   df2      b       2
    

    谢谢!

    2 回复  |  直到 6 年前
        1
  •  3
  •   BENY    6 年前

    用支票 keys

    pd.concat([df1, df2], keys=['df1', 'df2'],names =['id','index']).reset_index(level=0)
    Out[880]: 
            id letter  number
    index                    
    0      df1      a       1
    1      df1      b       2
    0      df2      a       1
    1      df2      b       2
    

    如果要动态创建关键点

    pd.concat({x : y for x,y in enumerate([df1, df2])},names =['id','index']).reset_index(level=0)
    Out[879]: 
           id letter  number
    index                   
    0       0      a       1
    1       0      b       2
    0       1      a       1
    1       1      b       2
    
        2
  •  2
  •   Hello.World    6 年前
    pd.concat([df1, df2],keys=['df1','df2']).reset_index(level=0).rename(columns = {'level_0':'.id'})
    
        id  letter  number
    0   df1 a   1
    1   df1 b   2
    0   df2 a   1
    1   df2 b   2