2016-03-21 16 views
1

Bir ölçüm veri kümesi üzerinde çalışıyorum. Aşağıdaki tabloda olduğu gibi bir veri çerçevesinde veri var, veri her 0.5m/s rüzgar hızı kutusu için güç ve rüzgar hızıdır. Fakat her bir bölmedeki Hassasiyet sütununu güç ve rüzgar hızı değerlerinden hesaplamam gerekiyor. hassasiyet için, formül Bir önceki kutusu değerinden güç ve hız mevcut kutusu değerlerini çıkarmak zorundapython yineleme

sensitivity = abs ((Pi - Pi_1)/(Vi - Vi_1)) 

olup.

Bu senaryo için for loop komut dosyasına ihtiyacım var. Ben tüm for loop seçenekleri kullanarak biraz kafam karıştı, birisi bana bu konuda yardımcı olabilir misiniz?

Not:

uncut = df.groupby(pd.cut(df.normalized_speed, ws_bin))['pt_power_avg', 'normalized_speed'].mean() 

Veri Tablosu: Aşağıda DataFrame komut bu değerleri var

normalized_speed pt_power_avg [Pi] normalized_speed [Vi] *sensitivity* 
[Ci]" 
(0, 0.5]     0      0     - 
(0.5, 1]     0      0     - 
(1, 1.5]     0      0     - 
(1.5, 2]     0      0     - 
(2, 2.5]     6.46      2.44    2.6 
(2.5, 3]    14.22      2.73    26.2 
(3, 3.5]    27.05      3.26    24.4 
(3.5, 4]    56.67      3.77    58.6 
(4, 4.5]    88.55      4.26    64.7 
(4.5, 5]    121.95      4.76    66.8 
(5, 5.5]    166.87      5.26    89.5 
(5.5, 6]    221.16      5.74    112.6 
(6, 6.5]    283.94      6.26    122.4 
(6.5, 7]    310.32      6.74    54.7 
(7, 7.5]    472.59      7.29    297.0 
(7.5, 8]    582.02      7.70    261.2 
(8, 8.5]    703.98      8.17    261.1 
(8.5, 9]    927.60      8.77    375.4 
(9, 9.5]    995.10      9.11    194.1  

cevap

0

Kullanım shift() yerine pandalar ise for looping

, sen shift kullanmalıdır for looping yerine özellik. Pandalar, her satırda for looping olmadan veri sütunları üzerinde bu tür hesaplamaları yapmak için inşa edilmiştir!

varsayarsak orijinal veriler DataFramedf denilen içindedir, denklem

ile temsil edilir
# Calculate equation (broken into numerator and denominator for example) 
numerator = df['pt_power_avg [Pi]'] - df['pt_power_avg [Pi]'].shift() 
denominator = df['normalized_speed [Vi]'] - df['normalized_speed [Vi]'].shift() 
calculated_sensitivity = (numerator/denominator).abs() 

# Add to DataFrame 
print 'Calculated Sensitivity:' 
print calculated_sensitivity 
print 

Calculated Sensitivity: 
normalized_speed 
(0, 0.5]   NaN 
(0.5, 1]   NaN 
(1, 1.5]   NaN 
(1.5, 2]   NaN 
(2, 2.5]  2.647541 
(2.5, 3]  26.758621 
(3, 3.5]  24.207547 
(3.5, 4]  58.078431 
(4, 4.5]  65.061224 
(4.5, 5]  66.800000 
(5, 5.5]  89.840000 
(5.5, 6] 113.104167 
(6, 6.5] 120.730769 
(6.5, 7]  54.958333 
(7, 7.5] 295.036364 
(7.5, 8] 266.902439 
(8, 8.5] 259.489362 
(8.5, 9] 372.700000 
(9, 9.5] 198.529412 
dtype: float64 
+0

Hey teşekkürler adamım, Bu bana çok yardımcı olur – Babu

+0

Sevindim Yardımcı olabilir! – tmthydvnprt

+0

[Unutmayın, siz +2 şöhretiniz olsun!] (Http://meta.stackexchange.com/a/5235/292533) – tmthydvnprt

0

benim sonuç

 normalized_speed 
(0, 0.5]   NaN 
(0.5, 1]   NaN 
(1, 1.5]   NaN 
(1.5, 2]   NaN 
(2, 2.5]   NaN 
(2.5, 3]  26.180203 
(3, 3.5]  24.390952 
(3.5, 4]  58.638289 
(4, 4.5]  64.677315 
(4.5, 5]  66.751720 
(5, 5.5]  89.462064 
(5.5, 6]  112.621292 
(6, 6.5]  122.390346 
(6.5, 7]  54.709085 
(7, 7.5]  296.962721 
(7.5, 8]  261.151143 
(8, 8.5]  261.063389 
(8.5, 9]  375.387079 
(9, 9.5]  194.122176 
(9.5, 10]   NaN 
dtype: float64 
[2,2.5] 2.6 olmadan altındadır
+0

bunu çözdünüz mü? – tmthydvnprt

+0

no, hesaplanan duyarlılık değerinin (2.5,2.5) NaN olarak gösterildiğini görebiliyorsunuz ama bu 2.6 değerine sahip olmalı ... çünkü Dataframe'deki NaN yüzünden inanıyorum. (0), ancak çalışmıyor – Babu

+0

hey çözüldü: – Babu