我正在學習 python,并提出了一種逐行計算值的方法,但我確信有一個更優(yōu)雅(更快)的解決方案。這是一個簡單的例子: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有一個更好的方法嗎?我正在處理一些大型數(shù)據(jù)集,以這種方式運行它需要一段時間。
1 回答

catspeake
TA貢獻1111條經(jīng)驗 獲得超0個贊
是的,我們有shiftfordiff循環(huán)和沒有 for 循環(huán)
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
添加回答
舉報
0/150
提交
取消