2017-04-24 52 views
2

我有以下Dataframes:如何在熊猫中连接两个不同列数的框架?

数据帧1:

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

数据帧2:

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

我想产生如下数据框:

|---------------------|------------------| 
|  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]}) 

我几乎没有熊猫的经验,所以我该怎么办?

回答

3

您可以使用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 
+0

谢谢,它的工作?哪一个在时间问题上更有效? – lmiguelvargasf

+1

一些简单的时序表明它们的速度差不多,但如果你有两个以上的数据帧列表,'pd.concat'有一个优点,因为它可以在一个命令中作为'pd.concat(list_of_dataframes)'来完成'而'append'不能。但严格来说,我对这两种方法的时间比较知之甚少。我经常使用'pd.concat'。 – Psidom

+0

非常感谢你。 – lmiguelvargasf

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

好处是整数类型应该保留

+0

你应该保留“整数类型”是什么意思? – lmiguelvargasf

+1

@lmiguelvargasf我的意思是,当你连续,追加,重新索引,或以其他方式在整数列中引入潜在的南,你会自动将该列转换为浮动。通过重新索引其他数据框列并使用fill_value选项,我们告诉大熊猫不转换,但保持为整数,并用零填充缺失。而且,这对concat也同样适用。 – piRSquared

相关问题