python - 通过应用返回元组的函数来创建 DataFrame
问题描述
我有一个具有以下功能的数据集:
[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)
执行时间太长。有没有更蟒蛇的方式呢?
先感谢您
解决方案
更改您的函数,使其返回列表而不是元组。然后,使用 的result_type
参数pd.DataFrame.apply
:
df[<list_of_columns>].apply(lambda row: cart2kep(*row), axis=1, result_type='expand')
推荐阅读
- deep-learning - 边界框创建器
- android - Android - 出现了奇怪的点
- python - Odoo 13:如何编写一个好的过滤器以便将数据发送到 odoo 网站页面?
- c# - 在固定的方形图片框中制作方形矩形,如网格
- python - 填写带有机械化错误的表单(HTTP 错误 400:错误请求)
- static-files - 使用 FastAPI/Starlette 提供静态文件时的相对 URL 路径
- node.js - Mongodb,用户选择过滤器时的猫鼬产品过滤器搜索查询
- haskell - 从一组单子动作中获取第一个“非空”值的标准组合器
- azure - Azure 在上传文件时出现存储异常
- android - 无法从 quickblox 获取通话状态