在 Pandas 中减去两个不平衡的 DataFrame

Subtract two unbalanced DataFrames in Pandas

我有两个不平衡的数据帧,我想通过减去值来创建第三个数据帧以获得它们之间的增量。这是三个数据框的示例。我想取 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 中并使用正确的 rows/indices 作为 0 来做到这一点。

我试过了:

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

然后从那里减去,但是当我尝试 concat 时我得到一个错误 "ValueError: shape mismatch: value array of shape (0,13) could not be broadcast to indexing result of shape (1,13)" 所以不确定那里发生了什么。

你需要 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

使用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