Pandas函数矢量化



我开发了一个需要校准100万个数据的程序,我想对它进行矢量化以获得时间性能。

我有一个数据框的列:['time', 'raw_data'],我想创建一个新的列与校准的数据

我有另一个数据框架,其中我有校准数据。数据框由以下列组成:['calibration_name', 'raw_value', 'calibrated_value']

现在我开发了一个检索calibrated_value的函数,我可以使用apply方法来实现:

def calibrate(value, calibration):
df_calibrations = pd.read_csv('calibration_data.csv', usecols=['calibration_name', 'raw_value', 'calibrated_value'])
y_out = df_calibrations.loc[df_calibrations ['calibration_name'] == value]['calibrated_value'].iloc[0]

df = pd.read_csv('data_to_calibrate.csv', usecols=['time', 'raw'])
calibration = 'calibration_name'
df['eng'] = df['raw'].apply(calibrate, calibration=calibration)

现在我的代码工作得很好,但我想提高性能,所以我决定向量化为:

df['eng'] = calibrate(df['raw'], calibration)

然而,我得到一个错误,如:

('Lengths must match to compare', (11,), (7630,))

我想不出一个向量化这行的解决方案:

y_out = df_calibrations.loc[df_calibrations ['calibration_name'] == value]['calibrated_value'].iloc[0]

有办法吗?

data_to_calibrate.csv:

time,   raw
1571348671638000000,    1
1571348676493000000,    3
1571348681180000000,  2

calibration_data.csv:

calibration_name,  raw_value,   raw_value
XXXX01  0   A
XXXX01  1   B
XXXX01  2   C
XXXX01  3   D

通过合并公共列,您可以以向量化的方式执行所有必要的业务逻辑

data_to_calibrate = data_to_calibrate.merge(calibration_data, how='left', left_on='raw', right_on='raw_value')
data_to_calibrate.loc[data_to_calibrate['raw_value'].notna(), 'time'] = data_to_calibrate['raw_value']

最新更新