NaNs, wenn die Subtraktion von dataframes pandas

Habe ich zwei dataframes mit nur wenig überlappenden Indizes und Spalten.

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)))

Ich möchte, um die Differenz zu ermitteln zwischen Sie und versuchte,

delta = new - old

Dieser gibt viele NaNs, wo Indizes und Spalten nicht übereinstimmen. Ich möchte zur Behandlung der Abwesenheit der Indizes und Spalten, die als Nullen, (alt['n', 'D'] = 0). alte werden immer ein Unterraum von neuen.

Irgendwelche Ideen?

BEARBEITEN:
Ich denke, ich habe es nicht erklären gründlich genug. Ich will nicht, um zu füllen das delta dataframe mit Nullen. Ich möchte zur Behandlung von fehlenden Indizes und Spalten in alten, als wären Sie Nullen. Ich würde dann, um den Wert im neuen['n', 'D'] in der delta-anstelle eines NaN.

  • rufen Sie delta = delta.fillna(0) zu ersetzen, die nan-Werte
  • Ich denke, ich habe es nicht erklären gründlich genug. Ich will nicht, um zu füllen das delta dataframe mit Nullen. Ich möchte zur Behandlung von fehlenden Indizes und Spalten in alten, als wären Sie Nullen. Ich würde dann, um den Wert im neuen['n', 'D'] in der delta-anstelle eines NaN.
  • Ich werde wiedereröffnet, sobald ich wieder an pc, im Grunde, was Sie tun möchten, ist nehmen Sie die union der beiden dfs-Spalten und-Indizes, reindex beide dfs und füllen nan mit null und dann subtrahieren
  • Ich denke, Sie können einfach verwenden Sie sub mit fill_value=0 siehe meine Antwort
Schreibe einen Kommentar