Мне нужно обновить многоиндексный фрейм данных с одноиндексным.Новый фрейм данных является подмножеством старого, просто с новыми значениями, поэтому создание нового столбца или строки не требуется.Обновляются только выбранные фрагменты, и это должно поддерживать обновление более одного столбца одновременно.Я бы хотел, чтобы панды выполняли автоматический разбор индекса строки и перезаписывали только предоставленные строки.
Можно ли это сделать в API-интерфейсе pandas 0.24.2 без циклов, пользовательских функций, сброса индекса илисоздание мультииндекса?(Какой смысл иметь мультииндекс, если вы не можете нарезать и обновлять?) Я перебирал другие вопросы и не нашел актуального ответа, который применим к этому конкретному варианту использования или предлагает элегантное решение.
Вот некоторый код.
df_old = pd.DataFrame(
[['a', 'x', 0, 0, 0], ['a', 'y', 0, 0, 0], ['a', 'z', 0, 0, 0],
['b', 'x', 0, 0, 0], ['b', 'y', 0, 0, 0], ['b', 'z', 0, 0, 0],
],
columns=['i1', 'i2', 'c1', 'c2', 'c3']).set_index(['i1', 'i2'])
df_new = pd.DataFrame([['x', 1, 2], ['y', 3, 4]],
columns=['i2', 'c1', 'c2']).set_index('i2')
df_old
Out[]:
c1 c2 c3
i1 i2
a x 0 0 0
y 0 0 0
z 0 0 0
b x 0 0 0
y 0 0 0
z 0 0 0
df_new
Out[]:
c1 c2
i2
x 1 2
y 3 4
В идеале мне бы хотелось, чтобы работала следующая однострочная команда, но она абсолютно ничего не делает.Даже не выдается ни одного предупреждения.Я также попытался объединить и присоединиться безрезультатно.
df_old.loc[idx['a'], :].update(df_new)
Ожидаемый результат выглядит следующим образом, где обновляется только выбранный срез "a".
c1 c2 c3
i1 i2
a x 1 2 0
y 3 4 0
z 0 0 0
b x 0 0 0
y 0 0 0
z 0 0 0
Сводка данных в одной четкой картинке
Спасибо!