gpt4 book ai didi

python - pandas concat/merge/join multiple dataframes with only one column by this column

转载 作者:太空宇宙 更新时间:2023-11-04 02:03:42 27 4
gpt4 key购买 nike

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

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

使用列表理解的更动态的解决方案:

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 concat/merge/join multiple dataframes with only one column by this column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55196602/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com