Для создания более общего ответа ... первый я возьму общий индекс для синхронизации обоих dataframes, то я присоединюсь к каждому из них моего шаблона (даты) и я подведу столбцы то же имя, и, наконец, присоединиться как dataframes (удаление добавленных столбцов в одной из них),
вы можете увидеть пример (с ценами на акции Google, взяты из Google) можно здесь:
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)
Можете ли вы уточнить, что вы хотите, чтобы произошло, если элемент не существует в одном или обоих dataframes? Вы говорите, что если элемент не существует в * one * dataframe, его следует рассматривать как нуль - вы имеете в виду, что значение в этом фрейме данных должно рассматриваться как ноль и добавлено к значению из другого блока данных, или вы имеете в виду значение в кадре данных результата должно быть равным нулю? Кроме того, вы говорите, что 'df1 + df2' не работает, потому что он дает NaN, если у обоих нет элемента. Что вы хотите в этом случае? Вы хотите получить нуль? – BrenBarn