2016-11-07 13 views
0

Vielleicht eine einfache Frage - mit Blick auf den Code unten, wie kann ich das unten angegebene Beispiel umschreiben, um die Duplizierung zu vermeiden?Die gleiche Operation an mehreren Funktionseingängen ausführen

Die Eingänge sind Pandas Datenrahmen, die verschiedene Werte unter dem gleichen Spaltennamen enthalten - im Wesentlichen Messungen des gleichen Ereignisses von verschiedenen Beobachtern. Ich möchte die Länge dieser Funktion (und anderer, wo ich ähnliche Vervielfältigungen habe - nicht mitgeliefert) in zwei Hälften schneiden.

Das sieht genau nach der Art von Ort aus, um eine for-Schleife zu verwenden, aber ich bin nicht sicher, wie/wenn ich es implementieren kann, um durch die Funktionseingaben zu iterieren? Ich erwarte, dass dies eine einfache Antwort ist, aber ich war nicht in der Lage, meine Google-Suche effektiv zu zielen, um die Antwort selbst zu enthüllen. Hoffe du kannst helfen!

def data_manipulation(a, b): 
""" 
Performs math operations on the values contained in trajectory1(and 2). The raw values contained there are converted 
to more useful forms: e.g. apparent to absolute magnitude. These new results are added to the pandas data frame. 
Unnecessary data columns are deleted. 

All equations/constants are lifted from read_data_JETS. 

To Do: - remove code duplication where the same operation in written twice (once for each station). 

:param a: Pandas Data Frame containing values from first station. 
:param b: Pandas Data Frame containing values from second station. 
:return: 
""" 

# Convert apparent magnitude ('Bright') to absolute magnitude (Abs_Mag). 
a['Abs_Mag'] = (a['Bright'] + 2.5 * 
       np.log10((100 ** 2)/((a['dist']/1000) ** 2))) - 0.25 
b['Abs_Mag'] = (b['Bright'] + 2.5 * 
       np.log10((100 ** 2)/((b['dist']/1000) ** 2))) - 0.25 

# Calculate the error in absolute magnitude where 1 is the error in apparent magnitude and 0.001(km) is the error 
# in distance ('dist'). 
a['Abs_Mag_Err'] = 1 + (5/(a['dist']/1000) * 0.001) 
b['Abs_Mag_Err'] = 1 + (5/(b['dist']/1000) * 0.001) 

# Calculate the meteor luminosity from absolute magnitude. 
a['Luminosity'] = 525 * 10 ** (-0.4 * a['Abs_Mag']) 
b['Luminosity'] = 525 * 10 ** (-0.4 * b['Abs_Mag']) 

# Calculate the error in luminosity. 
a['Luminosity_Err'] = abs(-0.4 * a['Luminosity'] * np.log(10) * a['Abs_Mag_Err']) 
b['Luminosity_Err'] = abs(-0.4 * b['Luminosity'] * np.log(10) * b['Abs_Mag_Err']) 

# Calculate the integrated luminosity of each meteor for both stations. 
a['Intg_Luminosity'] = a['Luminosity'].sum() * 0.04 
b['Intg_Luminosity'] = b['Luminosity'].sum() * 0.04 

# Delete column containing apparent magnitude. 
del a['Bright'] 
del b['Bright'] 
+0

Nur ein Wörterbuch an die Funktion übergeben, und rufen Sie die Funktion zweimal (einmal für jedes Wörterbuch). –

+0

Sehr schön, danke! –

Antwort

1

Pass ein Wörterbuch für die Funktion, und es dann für jedes Wörterbuch einmal nennen:

def data_manipulation(x): 
    x['Abs_Mag'] = (x['Bright'] + 2.5 * np.log10((100 ** 2)/((x['dist']/1000) ** 2))) - 0.25 
    x['Abs_Mag_Err'] = 1 + (5/(x['dist']/1000) * 0.001) 
    x['Luminosity'] = 525 * 10 ** (-0.4 * x['Abs_Mag']) 
    x['Luminosity_Err'] = abs(-0.4 * x['Luminosity'] * np.log(10) * x['Abs_Mag_Err']) 
    x['Intg_Luminosity'] = x['Luminosity'].sum() * 0.04 
    del x['Bright'] 

data_manipulation(a) 
data_manipulation(b) 
Verwandte Themen