#python #pandas #dataframe
Вопрос:
У меня есть основной фрейм данных и вспомогательный фрейм данных. Оба имеют один и тот же индекс метки времени и столбцы, при этом у главного есть еще несколько столбцов. Я хочу скопировать данные определенного столбца из aux в master.
Мой код:
maindf = pd.DataFrame({'A':[0.0,NaN],'B':[10,20],'C':[100,200],},index=pd.date_range(start='2020-05-04 08:00:00', freq='1h', periods=2))
auxdf= pd.DataFrame({'A':[1,2],'B':[30,40],},index=pd.date_range(start='2020-05-04 08:00:00', freq='1h', periods=2))
maindf =
A B C
2020-05-04 08:00:00 0.0 10 100
2020-05-04 09:00:00 NaN 20 200
auxdf =
A B
2020-05-04 08:00:00 1 30
2020-05-04 09:00:00 2 40
Ожидаемый ответ: Я хочу взять данные столбца A в auxdf и скопировать в maindf, сопоставив индекс.
maindf =
A B C
2020-05-04 08:00:00 1 10 100
2020-05-04 09:00:00 2 20 200
Мое решение:
maindf['A'] = auxdf['A']
Мое решение неверно, потому что я копирую значения напрямую, не проверяя соответствие индекса. как мне найти решение?
Ответ №1:
Вы можете использовать .update()
, как показано ниже:
maindf['A'].update(auxdf['A'])
.update()
использует значения, отличные от NA, из переданных рядов для внесения обновлений. Выравнивается по индексу.
Обратите также внимание, что исходный dtype maindf['A']
сохраняется: остается float
типом, даже если auxdf['A']
имеет int
тип.
Результат:
print(maindf)
A B C
2020-05-04 08:00:00 1.0 10 100
2020-05-04 09:00:00 2.0 20 200
Комментарии:
1. таким образом,
.update()
заменяет все значения в maindf, независимо от того, являются ли они nan или плавающими, значениями из auxdf. Верно?2. @Mainland Он обновляет только соответствующие индексы / индексы (индексы строк и столбцов для фрейма данных). Следует отметить, что он принимает только значение, отличное от NA, из вспомогательного df / ряда.
3. @Mainland Вы можете обратиться к ссылке, которую я привел выше, для
Series.update()
получения дополнительных примеров операций с сериями. Также смотрите документDataFrame.update()
для примеров для фрейма данных.