Создание DataFrame путем применения функции, которая возвращает кортеж - PullRequest
0 голосов
/ 19 марта 2020

У меня есть набор данных, который имеет следующие функции:

[coord_x, coord_y, coord_z, xdot, ydot, zdot]

    epoch                   sat_id  x               y               z               Vx          Vy          Vz
0   2014-01-01 00:00:00.000 0   -8855.823863    13117.780146    -20728.353233   -0.908303   -3.808436   -2.022083
1   2014-01-01 00:46:43.000 0   -10567.672384   1619.746066 -24451.813271   -0.302590   -4.272617   -0.612796
2   2014-01-01 01:33:26.001 0   -10578.684043   -10180.467460   -24238.280949   0.277435    -4.047522   0.723155
3   2014-01-01 02:20:09.001 0   -9148.251857    -20651.437460   -20720.381279   0.715600    -3.373762   1.722115
4   2014-01-01 03:06:52.002 0   -6719.092336    -28929.061629   -14938.907967   0.992507    -2.519732   2.344703

Я определил функцию, которая принимает эти координаты и возвращает кортеж следующим образом:

(a, e, i, w, Om, theta) = cart2kep(coord_x, coord_y, coord_z, xdot, ydot, zdot)

Я хотел бы добавить a, e, i, w, Om, theta в качестве дополнительных функций к начальному фрейму данных: как я могу сделать это эффективно? В настоящее время я делаю это следующим образом:

out = df.apply(lambda x: cart2kep(x[2], x[3], x[4], x[5], x[6], x[7]), axis = 1)
out = out.apply(pd.Series, index = ['a', 'e', 'i', 'w', 'Om', 'theta'])
df = df.join(out)

Выполнение занимает слишком много времени. Есть ли еще способ pythoni c сделать это?

Заранее спасибо

1 Ответ

1 голос
/ 20 марта 2020

Измените вашу функцию, чтобы она возвращала список, а не кортеж. Затем используйте аргумент result_type pd.DataFrame.apply:

   df[<list_of_columns>].apply(lambda row: cart2kep(*row), axis=1, result_type='expand')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...