2016-11-17 16 views
6

インデックスと重複しているデータフレームが2つしかありません。データフレームを差し引くときの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))) 

は、私はそれらの間の差を計算したいと。これは、インデックスと列が一致しないのNaNの多くを与え

delta = new - old 

を試してみました。私は、インデックスとカラムの境界をゼロとして扱いたいと思っています(old ['n'、 'D'] = 0)。古いものは常に新しいものの部分空間になります。

アイデア?

編集: 私はそれを十分に説明していないと思います。デルタデータフレームをゼロで埋める必要はありません。私は欠落しているインデックスと列を古いものをゼロのように扱いたい。私はNaNの代わりにデルタで新しい['n'、 'D']の値を取得します。 fill_value=0

+1

コール 'デルタ= delta.fillna(0)'ナンは、私は徹底的に十分にそれを説明していなかったと思い – EdChum

+0

値交換します。デルタデータフレームをゼロで埋める必要はありません。私は欠落しているインデックスと列を古いものをゼロのように扱いたい。私はNaNの代わりにデルタで新しい['n'、 'D']の値を取得します。 –

+0

私はPCに戻ったらすぐに再オープンします。基本的には、dfs列とインデックスの両方の結合を取って、dfsを再インデクスし、nanを0にしてから引きます。 – EdChum

答えて

5

使用sub

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

の左上に空の目盛りが表示されます: '(new - old).fillna(0)' – dmeu

関連する問題