在Pandas

时间:2017-10-09 16:59:50

标签: python pandas dataframe isnull

我有两个不平衡的DataFrame,并希望通过减去值来创建第三个以获得它们之间的增量。这是三个数据帧的示例。我想取CURRENT,减去相应的EXPECTED以获得DELTA。这符合预期,当CURRENT和EXPECTED中的值存在时,我在DELTA中生成正确的结果。但是,当它们不存在时,我会在DELTA中获得NaN。当我希望它如下:

      CURRENT
      Region1    Region2
type1   5          3
type2   2          11
type3   7          1

      EXPECTED
      Region1    Region2
type1   15         1
type2   6          4

      DELTA
      Region1    Region2
type1   -10        2
type2   -4         7
type3   7          1

使用我当前的代码,DELTA中的type3行是NaN,NaN。

def get_delta(self, CURRENT, EXPECTED):
    delta = CURRENT
    delta['Region1'] = current[['Region1']] - \
                              expected[['Region1']]
    delta['Region2'] = current[['Region2']] - \
                              expected[['Region2']]
    return delta

我已经尝试检查delta.isnull()或delta.empty,但这不起作用。基本上我想将EXPECTED中任何不存在的值视为0,然后只需减去CURRENT - RESERVED以获得DELTA。我想我可以通过将任何NaN视为0来完成此操作,或者通过将缺少的行填入EXPECTED并使用正确的行/索引为0来实现此目的。

我试过了:

new_df = pd.concat([CURRENT, EXPECTED], axis=1).fillna(0)

然后从那里减去,但是当我尝试concat时我得到一个错误“ValueError:shape mismatch:value of shape(0,13)无法广播到形状的索引结果(1,13)”所以不知道那里发生了什么。

2 个答案:

答案 0 :(得分:0)

您需要DataFrame.sub参数fill_value=0

DELTA = CURRENT.sub(EXPECTED, fill_value=0)
print (DELTA)
       Region1  Region2
type1    -10.0      2.0
type2     -4.0      7.0
type3      7.0      1.0

答案 1 :(得分:0)

使用reindex

In [217]: CURRENT - EXPECTED.reindex(CURRENT.index, fill_value=0)
Out[217]:
       Region1  Region2
type1      -10        2
type2       -4        7
type3        7        1

详细

In [218]: CURRENT
Out[218]:
       Region1  Region2
type1        5        3
type2        2       11
type3        7        1

In [219]: EXPECTED
Out[219]:
       Region1  Region2
type1       15        1
type2        6        4