#python #pandas #dataframe #numpy #nan
#python #pandas #фрейм данных #numpy #nan
Вопрос:
Я пытался выяснить, как я могу умножить два фрейма данных вместе на основе общего индекса. Второй фрейм данных — это всего лишь подмножество первого фрейма данных, и я хочу умножить второй фрейм данных на первый фрейм данных.
Я пробовал .mul()
, но я всегда получаю либо матрицу, NaN
либо сообщение об ошибке TypeError: can't multiply sequence by non-int of type 'float'
. Я также пытался использовать эту map()
функцию, но мне не удалось найти никаких хороших руководств, которые помогли бы мне понять, как выполнить умножение на основе значений индекса.
В идеале я хочу получить результат, в котором индексы из фрейма данных 2 соответствуют фрейму данных 1, а результирующие значения под каждым столбцом представляют собой простое умножение соответствующих значений.
Dataframe #1
branch fineroot foliage
trm
002015 35.111533 35.111533 35.111533
002025 55.359203 55.359203 55.359203
002304 NaN NaN NaN
003015 356.592903 356.592903 356.592903
Dataframe #2
branch fineroot
trm
002025 55.359203 55.359203
002304 NaN NaN
003015 356.592903 356.592903
Expected Result
trm branch fineroot
002025 (55.359*55.359) (55.359*55.359)
002304 NaN NaN
003015 (356.59 * 356.59) (356.59 * 356.59)
Комментарии:
1. Похоже, что Pandas также продолжает пытаться умножить значения индекса, что просто кажется, что этого не должно происходить.
2. спасибо, так вы имеете в виду
df1.mul(df2).fillna(df1)
? Каков ваш ожидаемый результат?3. @anky Это решение приводит к ошибке
TypeError: can't multiply sequence by non-int of type 'float'
4. Но не для приведенного вами примера. существует некоторая проблема с вашими данными, которую вы должны изучить и отредактировать в примере. Я думаю, есть смешанные dtypes, просто предположение
5. @anky
trm
Столбец рассматривается как «объект», но все остальное рассматривается как плавающие значения. Похожеtrm
, что пытается быть умноженным на число с плавающей точкой, но я не могу понять, почему это произошло.