使用Pandas改进连接,排序和过滤性能

时间:2017-07-12 04:58:02

标签: python pandas numpy cython

我在两个数据帧上进行左外连接:

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,或者我是否应该考虑其他技术。有什么建议吗?

0 个答案:

没有答案