【发布时间】:2017-09-18 11:53:20
【问题描述】:
我正在尝试合并 2 个如下所示的数组:
第一:
[650001.88, 300442.2, 18.73, 0.575, 650002.094, 300441.668, 18.775]
[650001.96, 300443.4, 18.7, 0.65, 650002.571, 300443.182, 18.745]
[650002.95, 300442.54, 18.82, 0.473, 650003.056, 300442.085, 18.745]
[650005.28, 300444.76, 18.93, 0.463, 650005.368, 300444.395, 18.659]
[650006.17, 312903.26, 14.68, 0.442, 650006.146, 312902.819, 14.68]
[650006.18, 312902.89, 14.91, 0.243, 650006.146, 312902.819, 14.68]
[650006.17, 300445.16, 18.75, 0.402, 650006.286, 300444.792, 18.635]
[650006.8, 312904.65, 14.54, 0.479, 650006.904, 312905.096, 14.68]
[650006.78, 312905.06, 14.81, 0.184, 650006.904, 312905.096, 14.68]
[650011.84, 300447.74, 18.56, 0.546, 650011.836, 300447.197, 18.507]
[650012.96, 300446.92, 18.71, 0.553, 650013.238, 300446.497, 18.488]
[650014.07, 300447.51, 18.41, 0.614, 650014.2, 300446.914, 18.473]
[650001.18, 312862.23, 8.79, 40.338, 650014.526, 312899.965, 13.797]
[650001.19, 312861.88, 9.15, 40.619, 650014.526, 312899.965, 13.797]
秒:
[300441.668, 1]
[300443.182, 2]
[300442.085, 3]
[300444.395, 4]
[312902.819, 5]
[300444.792, 6]
[312905.096, 7]
[300447.197, 8]
[300446.497, 9]
[300446.914, 10]
[312899.965, 11]
第一个数组的第 7 列与第二个数组的第一列共享相同的参数。我的第一个数组包含近 5000 万条记录,第二个数组包含 50.000 条记录。我正在尝试基于共享列合并两个数组。
我的最终数组应该是这样的
715316 650001.88 300442.2 18.73 0.575 650002.094 300441.668 18.775 1
715317 650001.96 300443.4 18.7 0.65 650002.571 300443.182 18.745 2
715310 650002.95 300442.54 18.82 0.473 650003.056 300442.085 18.745 3
715304 650005.28 300444.76 18.93 0.463 650005.368 300444.395 18.659 4
129733 650006.17 312903.26 14.68 0.442 650006.146 312902.819 14.68 5
129739 650006.18 312902.89 14.91 0.243 650006.146 312902.819 14.68 5
715303 650006.17 300445.16 18.75 0.402 650006.286 300444.792 18.635 6
129851 650006.8 312904.65 14.54 0.479 650006.904 312905.096 14.68 7
129852 650006.78 312905.06 14.81 0.184 650006.904 312905.096 14.68 7
715302 650011.84 300447.74 18.56 0.546 650011.836 300447.197 18.507 8
715301 650012.96 300446.92 18.71 0.553 650013.238 300446.497 18.488 9
715250 650014.07 300447.51 18.41 0.614 650014.2 300446.914 18.473 10
129121 650001.18 312862.23 8.79 40.338 650014.526 312899.965 13.797 11
129127 650001.19 312861.88 9.15 40.619 650014.526 312899.965 13.797 11
129128 650001.19 312861.54 9.53 40.897 650014.526 312899.965 13.797 11
我设法做到了,但目前唯一的问题是我的 d1 字典覆盖了以错误输出结尾的重复键。
def merge_arrays(first, sec):
d1 = dict((x[5], x[0:]) for x in first)
d2 = dict((x[0], x[1:]) for x in sec)
finaldict = {key:(d2[key], d1[key]) for key in d2}
arr2 = []
for x in finaldict.values():
arr2.append(x)
#print(x)
arr = np.asarray(arr2)
a = np.array(arr)
output = np.array(list(map(np.concatenate,a)))
我猜我需要使用字典列表而不仅仅是普通字典。但我不知道如何将我的数组转换为具有重复键的字典列表。
编辑:
我尝试使用@zipa 方法:
d2 = dict((x[0], x[1:]) for x in sec)
finaldict = [item + d2[item[5]] for item in first]
print(finaldict[0])
[650001.88, 300442.2, 18.73, 0.575, 650002.094, 300441.668, 18.775]
我猜最后没有增加价值的原因是我的字典的创建方式。当我检查 d2[item[4]] 时,它会创建我 [1.] 而不仅仅是 1。我访问 item[4] 因为在我的数据中它与示例中的 item[5] 具有相同的值。
当我访问时,它会创建这个。
但仍然没有为我的合并数组增加价值。
【问题讨论】:
标签: arrays python-3.x dictionary