2017-04-11 132 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,非常感謝您的幫助。添加索引是我需要的解決方案:) –