Pandas beschleunigen Funktion anwenden
Für einen relativ großen Pandas-DataFrame (einige 100.000 Zeilen) möchte ich eine Serie erstellen, die das Ergebnis einer Apply-Funktion ist. Das Problem ist, dass die Funktion nicht sehr schnell ist und ich hatte gehofft, dass sie irgendwie beschleunigt werden kann.
df = pd.DataFrame({
'value-1': [1, 2, 3, 4, 5],
'value-2': [0.1, 0.2, 0.3, 0.4, 0.5],
'value-3': somenumbers...,
'value-4': more numbers...,
'choice-index': [1, 1, np.nan, 2, 1]
})
def func(row):
i = row['choice-index']
return np.nan if math.isnan(i) else row['value-%d' % i]
df['value'] = df.apply(func, axis=1, reduce=True)
# expected value = [1, 2, np.nan, 0.4, 5]
Vorschläge sind willkommen.
Aktualisiere
Eine sehr kleine Beschleunigung (~ 1.1) kann erreicht werden, indem die ausgewählten Spalten vorab zwischengespeichert werden.func
würde sich ändern zu:
cached_columns = [None, 'value-1', 'value-2', 'value-3', 'value-4']
def func(row):
i = row['choice-index']
return np.nan if math.isnan(i) else row[cached_columns[i]]
Aber ich hatte auf größere Beschleunigungen gehofft ...