【发布时间】:2020-07-15 20:15:49
【问题描述】:
(请注意,我希望找到一种不使用列表理解的方式)
假设我有以下数据(0,1,2 索引行号,[[111,20,3,4], [5,66,7,8], [9,10,11,12]] 是原始矩阵的行)
df1 = [(0, [111, 20, 3, 4]),
(1, [5, 66, 7, 8]),
(2, [9, 10, 11, 12])]
我想在 map 函数中使用 2 个 lambda 函数获得以下输出。它的格式为:(transposed_row_num, (original_row_num, value)) 对每一行(例如,行是[111, 20, 3, 4] 等)。
transposed_row_num 是这些行的列号。比如第0行的20的列号是1,所以应该是(1,(0,20))):
# Desired output:
[[(0, (0, 111)), (1, (0, 20)), (2, (0, 3)), (3, (0, 4))],
[(0, (1, 5)), (1, (1, 66)), (2, (1, 7)), (3, (1, 8))],
[(0, (2, 9)), (1, (2, 10)), (2, (2, 11)), (3, (2, 12))]]
我尝试了以下代码,但出现错误:
map2 = map(lambda x: [x[0]] + list(map(lambda y: y[0], x[1].index(y))),
df1)
list(map2)
# ValueError: [[111, 20], [3, 4]] is not in list
【问题讨论】:
-
您可能会考虑接受答案以奖励那些对您有帮助的人,或者至少发表评论以解释缺少的内容;)
标签: python mapreduce data-manipulation