python - pandas 按此列连接/合并/连接只有一列的多个数据帧

标签 python pandas join merge concatenation

我有(超过)两个数据框:

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_indexdrop=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

通过列表理解实现更动态的解决方案:

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

关于python - pandas 按此列连接/合并/连接只有一列的多个数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55196602/

相关文章:

python - 如何通过Python对目录中的多个值进行排序

java - couchbase golang json 原子增量

python - 如果满足条件,则在数据框中填充一列

python - 如何根据其他列中的一个而不是两个条件删除重复项

sql - 添加缺失行的默认值(学生和科目的组合)

python - 如何使用不同的条件填充缺失值

python - 如何合并pandas中的两个数据框?

python - 使用模式在 python 中版本字符串

bash - 使用 bash 连接 2 个文件的最简单方法,它们的两个键都出现在结果中

mysql - 从连接表中选择名称,其中连接表行 id 在父表列集中