在 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
我有两个不平衡的数据帧,我想通过减去值来创建第三个数据帧以获得它们之间的增量。这是三个数据框的示例。我想取 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