[英]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.