gpt4 book ai didi

pandas - 向特定数据框列添加单个值

转载 作者:行者123 更新时间:2023-12-02 15:58:45 25 4
gpt4 key购买 nike

我有一个像这样的数据框:

principalDf =

| x || y || z || values |
| x0 || y0 || z0 || areal |
| x1 || y1 || z1 || aimag |
| x2 || y2 || z2 || breal |
| x3 || y3 || z3 || bimag |

我要生产:

frobprincipalDf =

| x || y || z || values |
|sqrt(x0^2+x1^2)||sqrt(y0^2+y1^2)||sqrt(z0^2+z1^2)|| a |
|sqrt(x2^2+x3^2)||sqrt(y2^2+y3^2)||sqrt(z2^2+z3^2)|| b |

我通过以下方式生成所需的 x、y 和 z 数据:

frobprincipalDf = pd.DataFrame(columns=principalDf.columns)

for col in principalDf.columns[:-1]:
for index in range(0,len(principalDf),2):
frobnorm = np.sqrt(principalDf[col].iloc[index]**2+principalDf[col].iloc[index+1]**2)
print(frobnorm)

如何将 frobnorm 添加到新创建的 frobprincipalDf 中的特定 col

有比嵌套 for 循环更好的方法吗?

它应该对任何值名称都是通用的,这样如果另一个值以 a 开头,它就不会将它们“组合”在一起。


看起来下面是偶数索引对行添加的初始问题的完整解决方案。这是对准人类 answer 稍作修改的答案.将单个值添加到特定 df 列的次要问题仍然存在。

frobprincipalDf = np.sqrt(principalDf[['x', 'y', 'z']].shift() ** 2 + principalDf[['x', 'y', 'z']] ** 2)
frobprincipalDf = pd.concat([frobprincipalDf,principalDf['values'].str[:2]], axis=1)
frobprincipalDf = frobprincipalDf[frobprincipalDf.index % 2 == 1].reset_index(drop=True)

最佳答案

你可以使用 groupby+agg :

import numpy as np

group = df['values'].str.extract('(.*)(?:real|imag)', expand=False)
# 0 a
# 1 a
# 2 b
# 3 b

(df.select_dtypes('number')
.groupby(group)
.agg(lambda x: np.sqrt((x**2).sum()))
.reset_index()
)

示例输入:

    x   y   z values
0 1 2 3 areal
1 4 5 6 aimag
2 7 8 9 breal
3 10 11 12 bimag

输出:

  values          x          y          z
0 a 4.123106 5.385165 6.708204
1 b 12.206556 13.601471 15.000000

关于pandas - 向特定数据框列添加单个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71100372/

25 4 0
文章推荐: grails - Grails 2.2.4 JAXRS继承
文章推荐: javascript - 图像未裁剪为正确尺寸
文章推荐: google-cloud-platform - 用于获取负载均衡器列表的 GCP API
文章推荐: javascript - 使用 .createElement() 创建一个新的
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com