2016-11-17 155 views
6

我有兩個數據幀只有一些重疊的索引和列。NaN當減去數據幀大熊貓

old = pd.DataFrame(index = ['A', 'B', 'C'], 
        columns = ['k', 'l', 'm'], 
        data = abs(np.floor(np.random.rand(3, 3)*10))) 

new = pd.DataFrame(index = ['A', 'B', 'C', 'D'], 
        columns = ['k', 'l', 'm', 'n'], 
        data = abs(np.floor(np.random.rand(4, 4)*10))) 

我想計算他們之間的差異,並試圖

delta = new - old 

這給了很多的NaN,其中指數和列不匹配。我想把索引和列的缺失視爲零,(old ['n','D'] = 0)。舊的將永遠是新的子空間。

任何想法?

編輯: 我想我沒有足夠透徹的解釋。我不想用零填充增量數據幀。我想把舊的缺失索引和列視爲零。然後,我會在三角洲而不是NaN中獲得新['n','D']的值。

+1

調用'三角洲= delta.fillna(0)'更換NaN值 – EdChum

+0

我想我沒有解釋不夠徹底。我不想用零填充增量數據幀。我想把舊的缺失索引和列視爲零。然後,我會在三角洲而不是NaN中獲得新['n','D']的值。 –

+0

我會重新打開,一旦我回到電腦,基本上你想要做的是採取兩個dfs列和索引的聯合,重新索引這兩個dfs和填充零與零,然後減去 – EdChum

回答

5

使用subfill_value=0

In [15]: 
old = pd.DataFrame(index = ['A', 'B', 'C'], 
        columns = ['k', 'l', 'm'], 
        data = abs(np.floor(np.random.rand(3, 3)*10))) 
​ 
new = pd.DataFrame(index = ['A', 'B', 'C', 'D'], 
        columns = ['k', 'l', 'm', 'n'], 
        data = abs(np.floor(np.random.rand(4, 4)*10))) 
delta = new.sub(old, fill_value=0) 
delta 

Out[15]: 
    k l m n 
A 0 3 -9 7 
B 0 -2 1 8 
C -4 1 1 7 
D 8 6 0 6 
+0

工程就像一個魅力!謝謝! –

+0

不用擔心,你可以接受我的回答,我的答案 – EdChum

+0

的左上角會出現一個空白的勾號,相當於:(新 - 舊).fillna(0)' – dmeu