Pandas插值时apply传入整列而非单行值的问题如何解决?
问题修复方案
你当前代码的问题是:仅对df['new']单列调用apply时,无法同步获取该行对应的x_字段值,传入的df['x_']是完整的列数据,自然不符合要求。
方法1:最小改动修复(复用现有逻辑)
把错误行替换为按行遍历的apply,指定axis=1即可同时读取同一行的new和x_值:
df['interpolate2'] = df.apply(lambda row: interpolate_iv_my(x, row['new'], row['x_']), axis=1)
方法2:优化写法(省去冗余中间列)
你不需要专门生成new列存储每行的y值列表,可以直接在apply中读取对应列的值,代码更简洁:
import pandas as pd import numpy as np from scipy.interpolate import interp1d def interpolate_iv_my(x,y,newX_Value): y_interp = interp1d(x,y) iv = y_interp(newX_Value) return iv df = pd.DataFrame({'30': [-23, 12, -12, 10, -23, 12, -32, 15, -20, 10], '40': [-30, 20, -21, 15, -33, 22, -40, 25, -22, 12], '50': [-40, 25, -26, 19, -39, 32, -45, 35, -32, 18], '60': [-45, 34, -29, 25, -53, 67, -55, 45, -42, 19], }) x = [30,40,50,60] df['x_'] = np.random.choice([35,33,42,52],10).tolist() cols = ['30','40','50','60'] # 直接按行读取对应列做插值,无需中间列 df['interpolate2'] = df.apply(lambda row: interpolate_iv_my(x, row[cols].values, row['x_']), axis=1)
内容的提问来源于stack exchange,提问作者user13412850
相关产品推荐
相关产品推荐

