For a relatively large Pandas DataFrame (a few rows of 100k), I would like to create a series that is the result of applying the function. The problem is that the function is not very fast, and I was hoping that it could be somehow accelerated.
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)
Any suggestions are welcome.
Update
Very little acceleration (~ 1.1) can be achieved by pre-caching selected columns. funcwill change to:
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]]
But I was hoping for more acceleration ...
source
share