我有一个DataFrame df,从那里我想减去df2。
需要注意的是,我希望df保持相同的大小,对于df中的每个元素,我想减去df2(如果df2中没有这样的唯一索引/列),它只会是{{1} (因为在df2中找不到这样的索引/列)。
示例:
DF:
df(i,j) - 0
DF2:
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
我希望df-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
谢谢。
答案 0 :(得分: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
答案 1 :(得分: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