我在两个数据帧上进行左外连接:
def create_joined_dataframe(left, right, join_column):
joined_df = pd.merge(pd.DataFrame.from_records(left),
pd.DataFrame.from_records(right),
how='left',
left_on=join_column,
right_on='join_col'
).sort_values(by='block_index')
# convert special nan values to None
return joined_df.where((pd.notnull(joined_df)), None)
在上面的功能中,' left'并且'对'是两个numpy结构化数组和" join_column'的基数。主要是一对一。两个数据帧都包含大约130万行。
'离开' dataframe有一个名为' block_index'的列。使用哪个,我对连接的数据帧进行排序。
然后我转换了' nan'连接的数据框中的值为无值。此功能的平均执行时间为3.22秒。
In [19]: %timeit joined_df = create_joined_dataframe(left, right, ('chromosome', 'position'))
1 loop, best of 3: 3.22 s per loop
我想大大缩短执行时间(比如0.3秒)。
我尝试过使用Cython(没有代码更改)并且没有产生显着的加速。
我不确定我应该重构哪些部分以更好地利用Cython,或者我是否应该考虑其他技术。有什么建议吗?