Невозможно умножить два фрейма данных в Pandas на основе общего индекса

#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 , что пытается быть умноженным на число с плавающей точкой, но я не могу понять, почему это произошло.