Geçerli kod oldukça yavaş (ve Python en iyi uygulamaları öğrenmek istiyorum) olarak aşağıdaki kodu vektörsel bir şekilde yazmak istiyorum. Temel olarak, kod bugünün değeri dünün değerinin% 10'u içinde kalıyorsa, bugünün değeri (yeni bir sütunda) dünün değeriyle aynıdır. Aksi takdirde, bugünkü değeri değişmedi:Döngüler kullanmak yerine kod nasıl vektörel bir şekilde yazılır?
OldCol NewCol
0 100 100
1 115 115
2 101 101
3 100 101
4 99 101
5 70 70
6 72 70
7 75 70
8 78 70
9 80 70
10 110 110
sen yardım edebilir:
def test(df):
df['OldCol']=(100,115,101,100,99,70,72,75,78,80,110)
df['NewCol']=df['OldCol']
for i in range(1,len(df)-1):
if df['OldCol'][i]/df['OldCol'][i-1]>0.9 and df['OldCol'][i]/df['OldCol'][i-1]<1.1:
df['NewCol'][i]=df['NewCol'][i-1]
else:
df['NewCol'][i]=df['OldCol'][i]
return df['NewCol']
çıktı şu olmalıdır?
Böyle bir şey kullanmak istiyorum ama benim sorunu çözmek başaramadı: NewCol
olduğu
df[(0.9 <= df['NewCol']/df['OldCol']) & (df['NewCol']/df['OldCol'] <= 1.1)]
size tüm satırları verecek:
def test(df):
df['NewCol']=df['OldCol']
cond=np.where((df['OldCol'].shift(1)/df['OldCol']>0.9) & (df['OldCol'].shift(1)/df['OldCol']<1.1))
df['NewCol'][cond[0]]=df['NewCol'][cond[0]-1]
return df
'df' bir veri çerçevesi doğru: bir paralel olarak
? Df ['OldCol'] 'veya' NewCol '' dtype' nedir? Sanırım bu Pythonic'ten daha iyi bir panda kodlama sorunu. – hpaulj
'' OldCol = (100,115,101,100,99,70,72,75,78,80,81,82,110) '' için istenen sonuç nedir? – wwii