Панды: добавить (суммировать) фреймы данных с различными индексами и столбцами - PullRequest
0 голосов
/ 25 мая 2018

Я пытаюсь использовать возможности Pandas для добавления других фреймов данных вместе, но способы, которыми я пытаюсь это сделать, на самом деле не работают.Как правило, два кадра данных будут иметь несколько одинаковых строк (чьи значения должны быть добавлены) и несколько разных строк (и их следует объединить).Однако индекс может быть и другим.Как показано ниже:

# dataframe 1
pi = pd.PeriodIndex(start=2017, periods=10, freq='M')
a = pd.Series(np.full(shape=10, fill_value=2), pi)
b = pd.Series(np.full(shape=10, fill_value=3), pi)
df1= pd.DataFrame({'data_1': a, 'data_2': b})

# dataframe 2 to be added with longer index & additional data column
pi2 = pd.PeriodIndex(start=2016, periods=30, freq='M')
a = pd.Series(np.full(shape=30, fill_value=2), pi2)
b = pd.Series(np.full(shape=30, fill_value=3), pi2)
c = pd.Series(np.full(shape=30, fill_value=3), pi2)
df2= pd.DataFrame({'data_1': a, 'data_2': b, 'data_3': c})

new_df = df1 + df2
# returns a sum for all indices where there is a union, then nan 
# for everything else --> need to preserve values at those other locations
# data_3 should return array/series full of 3s instead of nans
# new_df.iloc[0,0] should return 2 instead of nan

Я пробовал несколько вещей, но на самом деле не заставлял их работать, так как любой материал not_null или fill_na вызывается после генерации nans.

1 Ответ

0 голосов
/ 25 мая 2018
new_idx = df1.index.union(df2.index)
new_cols = df2.columns.union(df2.columns)
new_df = df1.loc[new_idx, new_cols].fillna(0) + df2.loc[new_idx, new_cols].fillna(0)

Редактировать: На самом деле вы можете просто использовать

new_df = df1.add(df2, fill_value=0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...