我正在寻找 Pythonic 的方式来做等效于 bind_rows(R 中的 dplyr 包),它从 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

如果你想动态创建 key
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

关于python:行连接 2 个数据帧,将它们的名称保留为新列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55066516/

10-12 18:50