Как применить функции к Dataframe с массивами внутри него, в Python? - PullRequest
0 голосов
/ 05 апреля 2020

Я надеюсь прояснить вопросы, но позвольте мне объяснить лучше, у меня есть этот фрейм данных:

import pandas as pd
  m = pd.DataFrame({'A': (1, 2, 3), 
                    'B': ([0, 1, 2], [3, 4, 5], [6, 7, 8])})

Моя цель - получить столбец z, который равен квадрату каждого массива плюс х-целое число, соответствующее позиции в столбцах. Может быть, вы можете получить это так:

  m = pd.DataFrame({'A': (1, 2, 3), 
                    'B': ([1, 2, 3], [4, 5, 6], [7, 8, 9]),
                    'C': ([2, 5, 10], [18, 27, 38], [52, 67, 84])})

Я могу сделать это в R, используя этот код:

m <- m %>% mutate(z = map2(x,y, ~map2_dbl(.x,.y, ~ (.x + .y^2))))

Есть ли что-то подобное в Python? Привет

Ответы [ 2 ]

2 голосов
/ 05 апреля 2020

Это может стать довольно неэффективным при использовании списков python. Я бы предложил вам использовать numpy здесь:

import numpy as np

m['C'] = (np.stack(m.B.values)**2 + m.A.values[:,None]).tolist()

print(m)

A          B             C
0  1  [1, 2, 3]    [2, 5, 10]
1  2  [4, 5, 6]  [18, 27, 38]
2  3  [7, 8, 9]  [52, 67, 84]
2 голосов
/ 05 апреля 2020

В pandas, и поскольку в вашем столбце есть объект, из-за которого большая часть метода из pandas не будет работать, мы используем здесь для l oop. Этот метод должен быть достаточно быстрым ~

m['C']=[(x + np.array(y)**2).tolist() for x , y in zip(m.A,m.B)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...