web-dev-qa-db-ja.com

データフレームを減算する場合のNaN pandas

インデックスと列が少しだけ重なっている2つのデータフレームがあります。

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)。 oldは常にnewのサブスペースになります。

何か案は?

編集:私はそれを十分に説明しなかったと思います。デルタデータフレームをゼロで埋めたくありません。 oldで欠落しているインデックスとカラムをゼロであるかのように扱いたい。次に、NaNではなくデルタのnew ['n'、 'D']の値を取得します。

sub with fill_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
8
EdChum