【发布时间】:2018-11-08 03:07:22
【问题描述】:
我有 6 个由 ID 键链接的 pandas 数据帧(Patients、Test1、Test2、Test3、Test4、Test5)。
患者数据框中的每一行代表一个包含唯一 ID 的患者,每行有 200000 多名患者。
测试数据框中的每一行代表一天的测试结果。测试数据框的列是 ID、DATE、TEST_UNIT、TEST_RESULT。每个测试数据帧包含 6,000,000 到 7,000,000 行。
我想遍历患者数据帧中的所有 ID,并在每次迭代中使用 ID 从 5 个测试数据帧中的每一个中提取相关测试数据并对它们进行一些处理。
如果我这样做
for i in range(len(Patients)):
ind_id = Patients.ID.iloc[i]
ind_test1 = Test1[Test1['ID'] == ind_id]
ind_test2 = Test2[Test2['ID'] == ind_id]
ind_test3 = Test3[Test3['ID'] == ind_id]
ind_test4 = Test4[Test4['ID'] == ind_id]
ind_test3 = Test5[Test5['ID'] == ind_id]
每次迭代大约需要 3.6 秒。
当我尝试使用 Numpy 界面加速它时。
Patients_v = Patients.values
Test1_v = Test1.values
Test2_v = Test2.values
Test3_v = Test3.values
Test4_v = Test4.values
Test5_v = Test5.values
for i in range(len(Patients_v)):
ind_id = Patients_v[i, ID_idx]
ind_test1 = Test1_v[Test1_v[:, 0] == ind_id]
ind_test2 = Test2_v[Test2_v[:, 0] == ind_id]
ind_test3 = Test3_v[Test3_v[:, 0] == ind_id]
ind_test4 = Test4_v[Test4_v[:, 0] == ind_id]
ind_test5 = Test5_v[Test5_v[:, 0] == ind_id]
每次迭代大约需要 0.9 秒。
如何加快速度?
谢谢
【问题讨论】:
标签: python pandas performance numpy-ndarray