2017-04-11 117 views
1

我需要能够将具有相同结构的两个数据帧的值相加,并形成新的数据帧。熊猫数据帧添加2个数据帧

例如DF1 + DF2 = DF3

DF1 
+------------+----+----+----+ 
| date | A | B | C | 
+------------+----+----+----+ 
| 2017-01-01 | 24 | 15 | 4 | 
| 2017-01-02 | 31 | 10 | 12 | 
| 2017-01-03 | 9 | 47 | 3 | 
+------------+----+----+----+ 

DF2 
+------------+----+----+----+ 
| date | A | B | C | 
+------------+----+----+----+ 
| 2017-01-01 | 4 | 12 | 63 | 
| 2017-01-02 | 23 | 0 | 31 | 
| 2017-01-03 | 61 | 22 | 90 | 
+------------+----+----+----+ 

DF3 
+------------+----+----+----+ 
| date | A | B | C | 
+------------+----+----+----+ 
| 2017-01-01 | 28 | 27 | 67 | 
| 2017-01-02 | 64 | 10 | 43 | 
| 2017-01-03 | 70 | 69 | 93 | 
+------------+----+----+----+ 

我一直在试图找出如何做到这一点,但尝试做的,当我得到一个类型错误

TypeError: unsupported operand type(s) for +: 'datetime.date' and 'datetime.date' 

df3 = df1.add(df2, fill_value=0) 

我确定我错过了一些简单的东西,因为它似乎试图添加第一列(这是一个日期和我想匹配的列以将所有其他列的值加在一起),但任何帮助都会很大赞赏。

+0

如果您拿出日期列并稍后添加它,它应该工作。鉴于您的数据结构,这是否可能?它将在上述情况下工作。 – clog14

+0

日期需要保持链接到数据,否则数据不是很好。我想基本上我需要的是根据datafrmes之间的日期匹配来合并相应的列 –

+0

另一个选项是使用concat,groupby和sum:'df3 = pd.concat([df1,df2])。groupby(' date')。sum()。reset_index()' –

回答

4

您希望date列是索引,不正常的列:

df3 = df1.set_index('date').add(df2.set_index('date'), fill_value=0).reset_index() 

您使用set_index()以便日期列中为索引。如果您不希望将最终的数据框设为日期索引,您可以在@MaxU建议的末尾使用reset_index()

+0

我还会在末尾加上'.reset_index()';-) – MaxU

+1

@MaxU - 好点,补充。谢谢! – ASGM

+0

@ASGM,非常感谢您的帮助。添加索引是我需要的解决方案:) –