簡體   English   中英

減去熊貓中兩個不平衡的數據框

[英]Subtract two unbalanced DataFrames in Pandas

我有兩個不平衡的DataFrames,想通過減去值以獲取它們之間的增量來創建第三個。 這是三個數據幀的示例。 我想取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)的索引結果”,因此不確定是什么繼續在那里。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM