Para hacer más general la respuesta ... primero voy a tomar el índice común para sincronizar ambas tramas de datos, entonces se unirá a cada uno de ellos a mi patrón (fechas) y voy a resumir las columnas de el mismo nombre y, finalmente, se unen las dos tramas de datos (borrar columnas añadidas en uno de ellos),
se puede ver un ejemplo (con precios de las acciones de Google tomadas de Google) aquí:
import numpy as np
import pandas as pd
import datetime as dt
prices = pd.DataFrame([[553.0, 555.5, 549.3, 554.11, 0],
[556.8, 556.8, 544.05, 545.92, 545.92],
[545.5, 546.89, 540.97, 542.04, 542.04]],
index=[dt.datetime(2014,11,04), dt.datetime(2014,11,05), dt.datetime(2014,11,06)],
columns=['Open', 'High', 'Low', 'Close', 'Adj Close'])
corrections = pd.DataFrame([[0, 555.22], [1238900, 0]],
index=[dt.datetime(2014,11,3), dt.datetime(2014,11,4)],
columns=['Volume', 'Adj Close'])
dates = pd.DataFrame(prices.index, columns = ['Dates']).append(pd.DataFrame(corrections.index, columns = ['Dates'])).drop_duplicates('Dates').set_index('Dates').sort(axis=0)
df_corrections = dates.join(corrections).fillna(0)
df_prices = dates.join(prices).fillna(0)
for col in prices.columns:
if col in corrections.columns:
df_prices[col]+=df_corrections[col]
del df_corrections[col]
df_prices = df_prices.join(df_corrections)
Puede aclarar lo que desea que suceda si un elemento no existe en una o ambas tramas de datos? Usted dice que si el elemento no existe en * un * marco de datos, debe tratarse como cero --- ¿quiere decir que el valor en ese marco de datos debe tratarse como cero y agregarse al valor del otro marco de datos, o quiere decir el valor en el marco de datos del resultado debe ser cero? Además, dices 'df1 + df2' no funciona porque da NaN si ambos no tienen el elemento. ¿Qué quieres que pase en este caso? ¿Quieres un cero en el resultado? – BrenBarn