interpolar valores de un marco de datos basado en un valor de columna

Suponiendo que tengo el siguiente problema:

import pandas as pd
import numpy as np

xp = [0.0, 0.5, 1.0]

np.random.seed(100)
df = pd.DataFrame(np.random.rand(10, 4), columns=['x0', 'y1', 'y2', 'y3'])

df
      x0     y1     y2     y3
0 0.5434 0.2784 0.4245 0.8448
1 0.0047 0.1216 0.6707 0.8259
2 0.1367 0.5751 0.8913 0.2092
3 0.1853 0.1084 0.2197 0.9786
4 0.8117 0.1719 0.8162 0.2741
5 0.4317 0.9400 0.8176 0.3361
6 0.1754 0.3728 0.0057 0.2524
7 0.7957 0.0153 0.5988 0.6038
8 0.1051 0.3819 0.0365 0.8904
9 0.9809 0.0599 0.8905 0.5769

Me gustaría interpolar una columna llamadainterp. El valor de la coordenada x a interpolar está contenido en la columnax0, la coordenada x de los puntos de datos seríaxp, y las coordenadas y de los puntos de datos estarían contenidas eny1, y2 yy3.

Hasta ahora, se me ocurrió lo siguiente:

df['interp'] = df.apply(lambda x: np.interp(x.x0, xp, [x.y1, x.y2, x.y3]), axis=1)

df
      x0     y1     y2     y3  interp
0 0.5434 0.2784 0.4245 0.8448  0.4610
1 0.0047 0.1216 0.6707 0.8259  0.1268
2 0.1367 0.5751 0.8913 0.2092  0.6616
3 0.1853 0.1084 0.2197 0.9786  0.1496
4 0.8117 0.1719 0.8162 0.2741  0.4783
5 0.4317 0.9400 0.8176 0.3361  0.8344
6 0.1754 0.3728 0.0057 0.2524  0.2440
7 0.7957 0.0153 0.5988 0.6038  0.6018
8 0.1051 0.3819 0.0365 0.8904  0.3093
9 0.9809 0.0599 0.8905 0.5769  0.5889

Sin embargo, el marco de datos en el que se realizará este cálculo contiene más de un millón de líneas, por lo que me gustaría privilegiar un método más rápido queapply. ¿Algunas ideas?

np.interp solo parece tomar matrices 1-D, y esta es la razón por la que elegíapply.

Respuestas a la pregunta(1)

Su respuesta a la pregunta