使用Pandas合并不同维度的多个数据框

3 投票
1 回答
6168 浏览
提问于 2025-04-18 18:10

我有以下几个数据框(实际上它们不止三个)。

import pandas as pd
df1 = pd.DataFrame({'head1': ['foo', 'bix', 'bar'],'val': [11, 22, 32]})
df2 = pd.DataFrame({'head2': ['foo', 'xoo', 'bar','qux'],'val': [1, 2, 3,10]})
df3 = pd.DataFrame({'head3': ['xoo', 'bar',],'val': [20, 100]})
# Note that the value in column 'head' is always unique

我想要做的是根据 head 这一列把它们合并在一起。每当某个 head 的值在某个数据框中不存在时,我们就给它赋值为 NA。

最后的结果应该是这样的:

         head1   head2  head3
 -------------------------------
 foo     11      1       NA
 bix     22      NA      NA
 bar     32      3      100
 xoo     NA      2      20
 qux     NA      10     NA

我该如何使用 Pandas 来实现这个呢?

1 个回答

10

你可以使用 pandas.concat,并选择 axis=1 来把多个数据表(DataFrame)合并在一起。

不过要注意,我首先把 df1, df2, df3 的索引设置成使用变量(比如 foo, bar 等),而不是默认的整数索引。

import pandas as pd

df1 = pd.DataFrame({'head1': ['foo', 'bix', 'bar'],'val': [11, 22, 32]})
df2 = pd.DataFrame({'head2': ['foo', 'xoo', 'bar','qux'],'val': [1, 2, 3,10]})
df3 = pd.DataFrame({'head3': ['xoo', 'bar',],'val': [20, 100]})

df1 = df1.set_index('head1')
df2 = df2.set_index('head2')
df3 = df3.set_index('head3')


df = pd.concat([df1, df2, df3], axis = 1)

columns = ['head1', 'head2', 'head3']
df.columns = columns

print(df)

     head1  head2  head3
bar     32      3    100
bix     22    NaN    NaN
foo     11      1    NaN
qux    NaN     10    NaN
xoo    NaN      2     20

撰写回答