假设我有以下问题:
我想要插值一个名为"interp"的列。需要插值的横坐标存储在"x0"列中,数据点的横坐标存储在"xp"列中,而数据点的纵坐标则分别存储在"y1"、"y2"和"y3"列中。以下是我目前的处理方式:
然而,需要进行计算的数据框包含超过一百万行,因此我希望使用比apply更快的方法。有什么建议吗?np.interp似乎只接受1-D数组,这就是我选择apply的原因。
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
我想要插值一个名为"interp"的列。需要插值的横坐标存储在"x0"列中,数据点的横坐标存储在"xp"列中,而数据点的纵坐标则分别存储在"y1"、"y2"和"y3"列中。以下是我目前的处理方式:
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
然而,需要进行计算的数据框包含超过一百万行,因此我希望使用比apply更快的方法。有什么建议吗?np.interp似乎只接受1-D数组,这就是我选择apply的原因。
eval()
会非常快。 :-) - Stephen Rauch