python:行连接 2 个数据帧,将它们的名称保留为新列
python: row concat 2 dataframes, keeping their names as a new column
我正在寻找与 bind_rows
(R 中的 dplyr
包)等效的 Pythonic 方法,它从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
谢谢!
检查 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
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
我正在寻找与 bind_rows
(R 中的 dplyr
包)等效的 Pythonic 方法,它从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
谢谢!
检查 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
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