连接存储在numpy数组中的两个数据表的有效方法是什么?

时间:2019-02-15 16:34:41

标签: python numpy

我有两个代表数据表的numpy数组的字典。 第一个表是作业(job_no)及其开始日期(start_date)的列表。 第二张表是每个作业要完成的任务列表(task_no)。 我想通过加入job_no有效地将开始日期添加到任务级别表中。

下面是一个示例,显示了表格的外观,并在任务级表格中添加了正确的开始日期。

job_no | start_date    job_no | task_no .    start_date
_______ ___________    _______ ________ .    __________
0      | 2019-01-01    0      | 1       .    2019-01-01
1      | 2019-01-04    0      | 2       . +  2019-01-01
2      | 2019-01-20    0      | 3       .    2019-01-01
3      | 2019-02-03    1      | 1       .    2019-01-04
4      | 2019-02-13    1      | 2       .    2019-01-04
...

我通常会尝试避免使用python循环,而是使用numpy函数来提高效率,但是在这种情况下,我一直坚持如何做到这一点。

我的数据集大约有25000个工作和100000个任务,下面的代码在完成上述任务方面非常慢。

jobs = {job_no : np.array(...), start_date : np.array(...)}
tasks = {job_no : np.array(...), task_no : np.array(...)}

tasks['start_date'] = np.empty(len(tasks['job_no']))

for job_ind, job_no in enumerate(jobs['job_no']):
    inds = np.where(tasks['job_no'] == job_no)
    tasks['start_date'][inds] = jobs['start_date'][job_ind]

使用numpy函数可以更有效地做到这一点吗?

1 个答案:

答案 0 :(得分:1)

使用熊猫定义一个数据框,然后进行简单的外部联接。取决于您从何处读取内容,但尝试将其获取到熊猫数据框。假设您设法将其作为PD1作为任务编号和开始日期,将PD2作为任务编号和开始日期。然后是job_no上的简单联接函数:

PD3= pandas.merge(PD1, PD2, how='outer', on=['job_no'])