为了账号安全,请及时绑定邮箱和手机立即绑定

通过逐行计算计算 pandas 数据框中的新列

通过逐行计算计算 pandas 数据框中的新列

紫衣仙女 2023-09-05 20:56:03
我正在学习 python,并提出了一种逐行计算值的方法,但我确信有一个更优雅(更快)的解决方案。这是一个简单的例子:df = pd.DataFrame(np.random.rand(10,3), columns=list('abc'))df.head()    a   b   c0   0.207455    0.257266    0.4533691   0.518193    0.816898    0.1419862   0.430085    0.490554    0.7976553   0.369860    0.251664    0.7770594   0.390059    0.983218    0.966202df['d']=''df['e']=''for i in range(1,len(df)):    df['d'][i]= sqrt((df['a'][i]-df['b'][i])**2+(df['a'][i-1]-df['b'][i-1])**2)    df['e'][i]= (df['c'][i]-df['c'][i-1])*1609    df.head()a   b   c   d   e0   0.207455    0.257266    0.453369        1   0.518193    0.816898    0.141986    0.30283 -501.0152   0.430085    0.490554    0.797655    0.304765    1054.973   0.369860    0.251664    0.777059    0.132766    -33.13964   0.390059    0.983218    0.966202    0.60482 304.331有一个更好的方法吗?我正在处理一些大型数据集,以这种方式运行它需要一段时间。
查看完整描述

1 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

是的,我们有shiftfordiff循环和没有 for 循环


df['d'] = ((df['a'] - df['b']) ** 2 + (df['a'].shift() - df['b'].shift()) ** 2)**0.5

df['e'] = (df['c'].diff()) * 1609

df

          a         b         c         d            e

0  0.207455  0.257266  0.453369       NaN          NaN

1  0.518193  0.816898  0.141986  0.302830  -501.015247

2  0.430085  0.490554  0.797655  0.304764  1054.971421

3  0.369860  0.251664  0.777059  0.132766   -33.138964

4  0.390059  0.983218  0.966202  0.604821   304.331087


查看完整回答
反对 回复 2023-09-05
  • 1 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信