减去Pandas中的两个不平衡数据帧



我有两个不平衡的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.istull()或delta.empty,但这不起作用。本质上,我想将EXPECTED中任何不存在的值都视为0,然后只需减去CURRENT-RESERVED即可获得DELTA。我想我可以通过将任何NaN处理为0,或者将缺失的行填充到EXPECTED中,并将正确的行/索引设置为0来实现这一点。

我试过了:

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

然后从中减去,但当我尝试concat时,我得到一个错误"ValueError:形状不匹配:形状(0,13)的值数组无法广播到形状(1,13)的索引结果",所以不确定那里发生了什么。

您需要参数为fill_value=0:的DataFrame.sub

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

相关内容

  • 没有找到相关文章

最新更新