Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python:row concat 2个数据帧,将它们的名称保留为新列_Python_R_Pandas_Rbind - Fatal编程技术网

python:row concat 2个数据帧,将它们的名称保留为新列

python:row concat 2个数据帧,将它们的名称保留为新列,python,r,pandas,rbind,Python,R,Pandas,Rbind,我正在寻找Pythonic方法来实现与bind_rows(dplyrR中的包)等效的功能,它从data.frames列表中进行数据帧连接,并自动将每个data.frame的名称添加为.id列,以记住行的来源 有没有一个简单的方法可以做到这一点?我试图使用pd.concat df1 = pd.DataFrame([['a', 1], ['b', 2]], columns=['letter', 'number']) df2 = df1.copy() pd.concat([df1, df2]) 预期

我正在寻找Pythonic方法来实现与
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

谢谢

键检查

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

看起来和我的答案一样。是的。我刚才看到了。我读了问题并贴出了答案。不管怎么说,我在你早些时候发布同样的功能时投了你的票,谢谢你的支持“重命名”提示与我的列名匹配好的,谢谢,我刚刚在文档中检查了这个关键参数,我不太清楚,你使用它是为了它的副作用,还是它是参数的实际用途?@agenis只需在这里为它们来自的数据添加id,这更像是一个副作用
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