为了账号安全,请及时绑定邮箱和手机立即绑定

python:行连接 2 个数据帧,将它们的名称保留为新列

python:行连接 2 个数据帧,将它们的名称保留为新列

紫衣仙女 2021-11-30 16:39:47
我正在寻找 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])预期输出:####     .id letter  number#### 0   df1      a       1#### 1   df1      b       2#### 0   df2      a       1#### 1   df2      b       2
查看完整描述

2 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

检查 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


查看完整回答
反对 回复 2021-11-30
?
四季花海

TA贡献1811条经验 获得超5个赞

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


查看完整回答
反对 回复 2021-11-30
  • 2 回答
  • 0 关注
  • 130 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信