减去两个不同大小的数据帧,但至少保持第一个数据帧的大小

时间:2017-03-01 21:04:55

标签: python pandas dataframe subtraction

我有一个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

谢谢。

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.subtractreindex_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