У меня есть два pandas.DataFrame
объектов с MultiIndex
индексов. Некоторые значения индекса разделяются двумя файлами данных, но не все. Я хотел бы объединить эти два кадра данных и взять сумму одного из столбцов, если существует строка (значение индекса). В противном случае сохраните значение строки и столбца в том виде, в каком оно существует.pandas concat/merge and sum one column
: This is close, but does not use MultiIndex
Я попытался создать пример:
def mklbl(prefix,n):
try:
return ["%s%s" % (prefix,i) for i in range(n)]
except:
return ["%s%s" % (prefix,i) for i in n]
mi1 = pd.MultiIndex.from_product([mklbl('A',4), mklbl('C',2)])
mi2 = pd.MultiIndex.from_product([mklbl('A',[2,3,4]), mklbl('C',2)])
df2 = pd.DataFrame({'b':np.arange(len(mi2)), 'c':np.arange(len(mi2))[::-1]},
index=mi2).sort_index().sort_index(axis=1)
df1 = pd.DataFrame({'a':np.arange(len(mi1)), 'b':np.arange(len(mi1))[::-1]},
index=mi1).sort_index().sort_index(axis=1)
Отдельные DataFrame
объекты выглядят как:
In [117]: df1
Out[117]:
a b
A0 C0 0 7
C1 1 6
A1 C0 2 5
C1 3 4
A2 C0 4 3
C1 5 2
A3 C0 6 1
C1 7 0
и
In [118]: df2
Out[118]:
b c
A2 C0 0 5
C1 1 4
A3 C0 2 3
C1 3 2
A4 C0 4 1
C1 5 0
То, что я хочу сделать, это объединить эти два, и суммировать столбец «B», но сохранить все строки, существуют ли они в той или иной dataframe:
In [117]: df_merged_bsummed
Out[117]:
a b c
A0 C0 0 7 NaN
C1 1 6 NaN
A1 C0 2 5 NaN
C1 3 4 NaN
A2 C0 4 3 5
C1 5 3 4
A3 C0 6 3 3
C1 7 3 2
A4 C0 NaN 4 1
C1 NaN 5 0
@DSM спасибо! Отредактировано ... – John