【发布时间】:2020-12-16 22:04:21
【问题描述】:
假设我们有两个二维数组,array1 和 array2,或者它们的 panda.DataFrame 等价物。对于array1 中的某些行,array2 中可能只有一行或没有行在我想要提取的第 2,3 和 4 列中具有相等的值。那就是:
array1 = array([[1,4, 5, 656, 1385, 434],
[11,46, 3, 7356, 585, 74],
[12,45, 5, 656, 135, 134],
[112,475, 3, 356, 285, 134],
])
array2 = array([[15,44, 5, 656, 1385, 434],
[151,436, 3, 356, 285, 74],
[521,406, 5, 656, 135, 24],
[152,445, 54, 56, 635, 134],
[72,727, 12, 16, 55, 634]])
而我正在寻找的是:
array1_filtered = array([[1,4, 5, 656, 1385, 434],
[112,475, 3, 356, 285, 134],
[12,45, 5, 656, 135, 134],
])
array2_filtered = array([[15, 44, 5, 656, 1385, 434],
[151, 436, 3, 356, 285, 74],
[521, 406, 5, 656, 135, 24]
])
两个过滤后的数组在其第 2,3 和 4 列方面匹配。更好的是,在过滤结果中具有相同的匹配顺序,如上所示。
我可以想到以下解决方案,但结果很慢:
array1_filtered = []
array2_filtered = []
for row in array1:
idx = np.where((array2[:, target_columns] == np.array([row[target_columns]])).all(axis=1))[0]
if idx.size != 0:
array1_filtered.append(row.tolist())
array2_filtered.append(array2[idx,:][0].tolist())
array1_filtered = np.asarray(array1_filtered)
array2_filtered = np.asarray(array2_filtered)
有人知道使用 numpy 或 pandas.DataFrame 的更快方法吗?
【问题讨论】:
标签: python pandas dataframe numpy