【发布时间】:2017-10-09 16:59:49
【问题描述】:
我有两个不平衡的 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:形状不匹配:形状 (0,13) 的值数组无法广播到形状 (1,13) 的索引结果”所以不知道那里发生了什么。
【问题讨论】:
标签: python pandas dataframe isnull