Py学习  »  Python

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

agenis • 6 年前 • 1918 次点击  

我在找一种像蟒蛇一样的方法 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

谢谢!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/43016
文章 [ 2 ]  |  最新文章 6 年前
Hello.World
Reply   •   1 楼
Hello.World    7 年前
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

WeNYoBen
Reply   •   2 楼
WeNYoBen    7 年前

用支票 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