Ok. , , . - , zip np.interp map? (. . , DataFrame.apply...) I.e. Pandas, map Series, DataFrame ( groupby)?
, :
df['rolled'] = zip(df['targ_alt'], zip(df['base'], df['mid'], df['peak']))
%timeit df['interped_temp'] = df['rolled'].map(lambda x: np.interp(x[0], probe_alts.values(), x[1]))
del df['rolled']
:
base mid peak targ_alt interped_temp
0 13.624345 10.462108 2.899381 1654.169624 11.555706
1 11.388244 6.939859 5.144724 1801.623237 7.822315
2 11.471828 8.677583 4.901591 1656.413650 9.637647
3 10.927031 8.615946 4.502494 1577.397179 9.592617
4 12.865408 10.133769 4.900856 1664.376935 11.050570
5 9.698461 7.900109 3.316272 1993.667701 7.911496
6 13.744812 8.827572 3.877110 1441.344826 11.574613
7 11.238793 8.122142 3.064231 2117.207849 7.726924
8 12.319039 9.042214 3.732112 2829.901089 6.104308
9 11.750630 9.582815 4.530355 2371.022080 8.333099
n=10, %timeit 182us/loop. n=1e6, %timeit 4.51s/loop. .
@DSM , probe_alts.values() . - , :
probes = ['base', 'mid', 'peak']
df['rolled'] = zip(df['targ_alt'], zip(*[df[p] for p in probes]))
df['interped_temp'] = df['rolled'].map(lambda x: np.interp(x[0], tuple(probe_alts[p] for p in probes), x[1]))
del df['rolled']
, , DataFrame.apply, ...
probes = ['base', 'mid', 'peak']
def cust_interp(row):
return np.interp(row['targ_alt'], tuple(probe_alts[p] for p in probes), row[probes])
df['interped_temp'] = df.apply(cust_interp, axis=1)