python - 减去 Pandas 中两个不平衡的 DataFrame

标签 python pandas dataframe isnull

我有两个不平衡的 DataFrame,并且想通过减去值来创建第三个 DataFrame,以获得它们之间的增量。这是三个数据框的示例。我想用当前值减去相应的预期值来得到 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)

然后从那里减去,但是当我尝试连接时,我收到错误“ValueError:形状不匹配:形状(0,13)的值数组无法广播到形状(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

关于python - 减去 Pandas 中两个不平衡的 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46651494/

相关文章:

python - 如何根据另一个数据框标准化 pandas 数据框

python-3.x - 如何将 Pandas df 刻度数据重新采样为 5 分钟的 OHLC 数据

python - 分隔某些列中具有相同值的行

python - 如何将 PK 传递到方法装饰器中

python - 使用 Amazon Textract 分析 PDF 的特定页面

python - 循环excel文件并基于Python中的一个公共(public)列进行合并

python - pandas 方式将一天中的时间(有效 datetime.time)转换为浮点变量

python - 使用正则表达式根据列的值在数据集中创建新列

python - Next() 跳过列表中的实际项和下一项,而它应该只跳过实际项

python - 当模板存在时,为什么 rst2pdf 会给出 TemplateNotFound 错误?