如何将多个 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')
我有 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')