2016-09-13 24 views
5

gelen pct değişim Ben -3.9 başlangıç ​​değerinden Dew_P Temp (C) ait pct_change bulmak istiyorum. Pct_change'in yeni bir sütunda olmasını istiyorum. BuradaPandalar Başlangıç ​​değeri

Kaynak:

weather = pd.read_csv('https://raw.githubusercontent.com/jvns/pandas-cookbook/master/data/weather_2012.csv') 
weather[weather.columns[:4]].head() 


Date/Time  Temp (C) Dew_P Temp (C) Rel Hum (%) 
0 2012-01-01 -1.8  -3.9    86 
1 2012-01-01 -1.8  -3.7    87 
2 2012-01-01 -1.8  -3.4    89 
3 2012-01-01 -1.5  -3.2    88 
4 2012-01-01 -1.5  -3.3    88 

ben (hatta kadarıyla burada gösterilen bir dizin ekleme gibi gidiyor) döngü için bu varyasyonlarını denedi ama boşuna:

for index, dew_point in weather['Dew_P Temp (C)'].iteritems(): 
    new = weather['Dew_P Temp (C)'][index] 
    old = weather['Dew_P Temp (C)'][0] 
    pct_diff = (new-old)/old*100 
    weather['pct_diff'] = pct_diff 

Sorunu düşünüyorum o veri çerçevesinin son değerini alır ve So old

onun onu çıkarır new almaz, weather['pct_diff'] olduğunu lways (2.1-3.9) /3.9*100 bu yüzden yüzde değişimim her zaman% -46'dır.

Date/Time  Temp (C) Dew_P Temp (C) Rel Hum (%) pct_diff 
0 2012-01-01 -1.8  -3.9    86   0.00% 
1 2012-01-01 -1.8  -3.7    87   5.12% 
2 2012-01-01 -1.8  -3.4    89   12.82% 

herhangi bir fikir: istediğim

sonuç şudur? Teşekkürler!

cevap

6

Sen skaler değere erişmek için iat kullanabilirsiniz (örneğin, iat[0] serideki ilk değerini erişir).

df = weather 
df['pct_diff'] = df['Dew_P Temp (C)']/df['Dew_P Temp (C)'].iat[0] - 1 
+0

ile beklenen çıkışı almak için bu daha zarif, çözüm çok daha iyidir bulun! – MaxU

+0

Bu gerçekten çok zarif bir çözümdür ... Bir döngü için bunu yapmak için bir neden olup olmadığını merak ediyorum, çünkü bu benim için en mantıklı. Kabul ediyorum – dyao

+0

Bu yazmayı özlü ve aynı zamanda çok etkili hem de sütun için bir vektörleşen çözümdür @dyao, bu – piRSquared

4

Eğer bu şekilde yapabiliriz IIUC:

In [88]: ((weather['Dew Point Temp (C)'] - weather.ix[0, 'Dew Point Temp (C)']).abs()/weather.ix[0, 'Dew Point Temp (C)']).abs() * 100 
Out[88]: 
0   0.000000 
1   5.128205 
2  12.820513 
3  17.948718 
4  15.384615 
5  15.384615 
6  20.512821 
7   7.692308 
8   7.692308 
9  20.512821 
2

Ben

weather['Dew_P Temp (C)'].pct_change().fillna(0).add(1).cumprod().sub(1) 

0 0.000000 
1 -0.051282 
2 -0.128205 
3 -0.179487 
4 -0.153846 
Name: Dew_P Temp (C), dtype: float64 

mutlak değerler

weather['pct_diff'] = weather['Dew_P Temp (C)'].pct_change().fillna(0).add(1).cumprod().sub(1).abs() 
weather 

IMO enter image description here