如何在pandas中连接具有不同列数的两个数据框?

16

我有以下数据框:

数据框 1:

|---------------------|------------------|
|      property_id    |        beds      |
|---------------------|------------------|
|          1          |         1        |
|---------------------|------------------|
|          2          |         2        | 
|---------------------|------------------|

数据框 2:

|---------------------| 
|      property_id    |
|---------------------|
|          3          |
|---------------------|
|          4          |
|---------------------|

我想要生成以下Dataframe:

|---------------------|------------------|
|      property_id    |        beds      |
|---------------------|------------------|
|          1          |         1        |
|---------------------|------------------|
|          2          |         2        | 
|---------------------|------------------|
|          3          |         0        |
|---------------------|------------------|
|          4          |         0        | 
|---------------------|------------------|
我想要的是将两个数据框连接起来,前一个比后一个有更多的列,但是后一个数据框中的所有列都在前一个数据框中。当后一个数据框中不存在某一列时,我希望将其默认值设为0。如何实现这一点?
df1 = pd.DataFrame({'property_id': [1, 2], 'beds': [1, 2]})
df2 = pd.DataFrame({'property_id': [3, 4]})

我几乎没有pandas的经验,我该怎么办?

2个回答

18

您可以使用pandas.concatappend方法来实现此操作,这两种方法会为子数据框中不存在的列生成NA,要用零填充它们,您可以使用fillna(0)

df1.append(df2).fillna(0)

#  beds     property_id
#0  1.0          1
#1  2.0          2
#0  0.0          3
#1  0.0          4


pd.concat([df1, df2]).fillna(0)

#  beds     property_id
#0  1.0         1
#1  2.0         2
#0  0.0         3
#1  0.0         4

谢谢,它起作用了吗?当时间是一个问题时,哪个更有效率? - lmiguelvargasf
1
一些简单的时间测试表明它们的速度大致相同,但如果您有两个以上的数据框列表,则pd.concat具有优势,因为它可以在一个命令中完成,如pd.concat(list_of_dataframes),而append则不能。但严格来说,我对这两种方法的时间比较并不了解。我更经常使用pd.concat - Psidom
为什么在连接后列的顺序会改变?我们如何获得与 df1 中相同的原始列顺序? - Math122
1
从版本1.4.0开始,pd.append已被弃用 - Philipp

5
df1.append(df2.reindex_axis(df1.columns, 1, fill_value=0))

优点是整数类型应该被保留。

1
“integer types should be preserved” 是什么意思? - lmiguelvargasf
2
@lmiguelvargasf 我的意思是,当您在整数列中连接、附加、重新索引或以其他方式引入潜在的nan时,您会自动将该列转换为浮点数。通过使用其他数据框列进行重新索引并使用fill_value选项,我们告诉pandas不要转换但保持为整数,并用零填充缺失值。此外,这也同样适用于concat。 - piRSquared
遗憾的是,append并不像建议的那样工作:结果表格具有两个表格中较窄的列数(而不是较宽的列数)。而且,reindex_axis不仅被弃用了,它已经不存在了...我认为这需要重构。 - mirekphd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接