如何将多个 df 与公共列并排连接?

How to concat multiple df side by side with common column?

我有 N 个数据帧。每个 DataFrame 都有两列,第一列总是带有 date 的常量,另一列名称是动态的。例如

df1

date            A
2017-12-31      5
2020-12-31      7
2021-12-31      8

df2

date            B
2012-12-31      9
2020-12-31      6

等等。所以我想要一个结果 result_df ,它将所有 date 与像这样并排的列

result_df

date            A     B    ...
2012-12-31      -     9    ...
2017-12-31      5     -    ...
2020-12-31      7     6    ...
2021-12-31      8     -    ...

特例 - 我也有一些空的 DataFrame。我希望将其合并到 result_df 中,例如,将像这样添加一个包含 ['date', 'C'] 列的空 DataFrame

result_df

date            A     B     C    ...
2012-12-31      -     9     -    ...
2017-12-31      5     -     -    ...
2020-12-31      7     6     -    ...
2021-12-31      8     -     -    ...

我们可以 concat + groupby + first:

dfX = pd.DataFrame(columns=['date','C'])
dfs = [df1, df2, dfX]
out = pd.concat(dfs).groupby('date', as_index=False).first().fillna('-')

输出:

         date    A    B  C
0  2012-12-31    -  9.0  -
1  2017-12-31  5.0    -  -
2  2020-12-31  7.0  6.0  -
3  2021-12-31  8.0    -  -

您可能想看看 pd.merge:https://pandas.pydata.org/docs/reference/api/pandas.merge.html 在您的情况下,以下代码应该有效

df1.merge(df2, on='date', how='outer')