python - pandas concat/merge/join 多个数据帧,该列只有一列
问题描述
我有(超过)两个数据框:
In [22]: df = pd.DataFrame({'database' : ['db1', 'db2', 'db3']})
In [23]: df1 = pd.DataFrame({'database' : ['db1', 'db2', 'db3']})
In [24]: df2 = pd.DataFrame({'database' : ['db2', 'db3', 'db4']})
In [25]: df1
Out[25]:
database
0 db1
1 db2
2 db3
In [26]: df2
Out[26]:
database
0 db2
1 db3
2 db4
我想要输出的是这种格式的数据框:
Out[45]:
database database
0 db1
1 db2 db2
2 db3 db3
3 db4
我设法以这种格式获得它,如下所示:
df1.index = df1.database.values.ravel()
df2.index = df2.database.values.ravel()
pd.concat([df1, df2], axis=1).fillna('').reset_index(drop=True)
但我认为必须有比这个带有 ravel() 函数的技巧更好的解决方案。
解决方案
DataFrame.set_index
与 一起使用drop=False
:
df = (pd.concat([df1.set_index('database', drop=False),
df2.set_index('database', drop=False)], axis=1)
.fillna('')
.reset_index(drop=True))
print (df)
database database
0 db1
1 db2 db2
2 db3 db3
3 db4
更动态的解决方案list comprehension
:
dfs = [df, df1, df2]
dfs1 = [x.set_index('database', drop=False) for x in dfs]
df = (pd.concat(dfs1, axis=1)
.fillna('')
.reset_index(drop=True))
print (df)
database database database
0 db1 db1
1 db2 db2 db2
2 db3 db3 db3
3 db4
推荐阅读
- sql - PostgreSQL,Window函数使用问题(附具体例子)
- java - Com.sun.media.jai.Seekablestream 类notfoundexception
- reactjs - React-router:在渲染时有条件地重定向
- sql - 如何在大查询中的 case 语句中使用逐行值?
- mongodb - 如何在pymongo中查找具有两个字段组合的文档
- javascript - 使用 Javascript 复制 HTML 内容,粘贴为格式化文本
- pytorch - Detectron2 的 DefaultPredictor 中的图像大小
- javascript - this.appendChild (articleItemElement) 上的 this 关键字;参考?
- c# - 取消正在进行密集操作的后台工作人员
- sql - 在 case 语句中使用 Max(boolean)