2017-03-01 92 views
3

我有一個DataFrame df,從那裏我想減去df2。減去兩個不同大小的數據幀,但至少保持第一個數據幀的大小

需要注意的是,我希望df保持相同的大小,並且對於df中的每個元素,我想減去df2(如果df2中沒有這種唯一索引/列),它只會是df(i,j) - 0(as在df2中找不到這樣的索引/列)。

例子:

DF:

Date Blue Dog Apple 
1/1/2016 3 4 2 
1/1/2015 3 4 2 
1/1/2014 3 4 2 
1/1/2013 3 4 2 
1/1/2013 3 4 2 
1/1/2013 3 4 2 

DF2:

Date Apple Blue Cat 
1/1/2017 1 3 2 
1/1/2016 1 3 2 
1/1/2015 1 3 2 
1/1/2014 1 3 2 

我想DF - DF2看起來像這樣:

Date Blue Dog Apple 
1/1/2016 0 4 1 
1/1/2015 0 4 1 
1/1/2014 0 4 1 
1/1/2013 3 4 2 
1/1/2012 3 4 2 
1/1/2011 3 4 2 

謝謝。

回答

4

填寫背面的差距:

(df-df2).combine_first(df).reindex_like(df).astype(int) 
Out[45]: 
      Blue Dog Apple 
Date      
1/1/2016  0 4  1 
1/1/2015  0 4  1 
1/1/2014  0 4  1 
1/1/2013  3 4  2 
1/1/2012  3 4  2 
1/1/2011  3 4  2 
2

Boud已經有你覆蓋與一個偉大的答案,但捎帶關閉它,你也可以只提供0填充值df.subtract,然後reindex_like

>>> df.subtract(df2, fill_value=0).reindex_like(df).astype(int) 
      Blue Dog Apple 
Date      
1/1/2016  0 4  1 
1/1/2015  0 4  1 
1/1/2014  0 4  1 
1/1/2013  3 4  2 
1/1/2012  3 4  2 
1/1/2011  3 4  2 

這看起來是從(粗糙)基準速度更快,因爲我們能夠避免combine_first組合。

%timeit df.subtract(df2, fill_value=0).reindex_like(df).astype(int) 
100 loops, best of 3: 3.63 ms per loop 

%timeit (df-df2).combine_first(df).reindex_like(df).astype(int) 
100 loops, best of 3: 8.69 ms per loop
相關問題