我有2个系列的熊猫数据框,每个数据框包含2d数组,例如 a是第一个系列子数组的长度不同,例如
a:
0 [[1,2,3,4,5,6,7,7],[1,2,3,4,5],[5,9,3,2]]
1 [[1,2,3],[6,7],[8,9,10]]
b是第二个,但它的子数组只有一个元素,如
b:
0 [[0],[2],[3]]
1 [ [1],[0],[1]]
我想根据b中给出的索引提取a系列的元素。 上面示例的结果应为:
0 [1,3,2]
1 [2, 6, 9]
有人可以帮忙吗?非常感谢
答案 0 :(得分:1)
设置
a = pd.Series({0: [[1, 2, 3, 4, 5, 6, 7, 7], [1, 2, 3, 4, 5], [5, 9, 3, 2]],
1: [[1, 2, 3], [6, 7], [8, 9, 10]]})
b = pd.Series({0: [[0], [2], [3]], 1: [[1], [0], [1]]})
由于您拥有大小不等的列表,因此很难做到这一点,但这是一个使用列表理解和zip
的解决方案:
out = pd.Series([[x[y] for x, [y] in zip(i, j)] for i, j in zip(a, b)])
0 [1, 3, 2]
1 [2, 6, 9]
dtype: object
答案 1 :(得分:0)
您可以使用apply
用a
为b
编制索引:
df.apply(lambda row: [row.a[i][row.b[i][0]] for i in range(len(row[0]))], axis=1)
0 [1, 3, 2]
1 [2, 6, 9]
dtype: object
数据:
data = {"a":[[[1,2,3,4,5,6,7,7],[1,2,3,4,5],[5,9,3,2]],
[[1,2,3],[6,7],[8,9,10]]],
"b": [[[0],[2],[3]],
[[1],[0],[1]]]}
df = pd.DataFrame(data)