2016-03-21 5 views
1

Ich arbeite an einem Messdatensatz. Ich habe Daten in einem Datenrahmen wie in der folgenden Tabelle, die Daten sind Leistung und Windgeschwindigkeit für jede 0.5m/s Windgeschwindigkeit Bin. Aber ich muss die Empfindlichkeitsspalte für jeden Behälter aus den Leistungs- und Windgeschwindigkeitswerten berechnen. Die Formel für die Sensitivität lautetPython Iteration über jeden Bins in einem Datenrahmen

.

Wir müssen die aktuellen Bin-Werte von Leistung und Geschwindigkeit vom vorherigen Bin-Wert subtrahieren.

Ich brauche ein for loop Skript für dieses Szenario. Ich bin wirklich ein bisschen verwirrt, indem ich alle for loop Optionen verwende, kann mir bitte jemand dabei helfen?

Anmerkung: Ich habe diese Werte aus der unten DataFrame Skript:

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

Daten Tabelle:

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  

Antwort

0

Verwenden shift() statt for looping

In Pandas, sollten Sie die shift verwenden Feature anstelle von for looping. Pandas ist gebaut, um genau diese Art von Berechnungen an Datenspalten ohne for looping über jede Zeile durchzuführen!

Angenommen, Ihre ursprünglichen Daten in einem DataFrame genannt ist df würde die Gleichung als

# 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 

dargestellt werden
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 danke Mann, das hilft mir viel – Babu

+0

Froh kann ich helfen! – tmthydvnprt

+0

[Denken Sie daran zu akzeptieren, erhalten Sie +2 Ruf!] (Http://meta.stackexchange.com/a/5235/292533) – tmthydvnprt

0

mein Ergebnis ist unten ohne 2.6 in [2,2.5]

 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 
+0

hast du das gelöst? – tmthydvnprt

+0

nein, Sie können sehen, der berechnete Empfindlichkeitswert bei (2.5,2.5) wird als NaN gezeigt, aber dies sollte den Wert von 2,6 haben ... ich glaube, es ist wegen der NaN im Dataframe.Ich versuchte, durch .Fillna zu beseitigen (0), aber es funktioniert nicht – Babu

+0

hey löste es: – Babu

Verwandte Themen