在 Python 中配对不同长度的数组

Pairing up arrays of different length in Python

给定两个不同长度的数组:

Column_a = [0, 1, 2, 3]
Column_b = [a, b, c, d, e, f, g, h, i, j]

我想将它们配对并提供一个 DataFrame,以便 Column_b 中的所有元素都与 Column_a 中的一个元素配对:

print(df)
               Column_a  Column_b
               0         a
               1         b
               2         c
               3         d
               1         e
               2         f
               3         g
               0         h
               1         i
               2         j

您可以执行一个简单的 for 循环来遍历最长的列并创建一个包含其中每个元素 x 的元组列表,分配给元素 [index_of_x % length_shortest_column].

例如:

df = []
for i,x in enumerate(column_b):
    df.append( (x, column_a[i % len(a)]) )

这应该为您提供以下内容(假设 column_b 包含字符):

df = [('a', 0), ('b', 1), ('c', 2), ('d', 3),
      ('e', 0), ('f', 1), ('g', 2), ('h', 3),
      ('i', 0), ('j', 1)]

您可能想为 df 使用不同的数据结构,但总体思路仍然相同。唯一重要的一点是您应该遍历最长的列表。也许有更好的方法来做到这一点,但如果紧要关头,这应该会让你继续前进。

尝试 itertools.cycle:

from itertools import cycle

Column_a = [0, 1, 2, 3]
Column_b = 'abcdefghij'
df = zip(cycle(Column_a if len(Column_a) < len(Column_b) else Column_b),
         Column_b if len(Column_a) < len(Column_b) else Column_a)
print(list(df))

输出:

[(0, 'a'),
 (1, 'b'),
 (2, 'c'),
 (3, 'd'),
 (0, 'e'),
 (1, 'f'),
 (2, 'g'),
 (3, 'h'),
 (0, 'i'),
 (1, 'j')]

请注意,Python 中的字符串值可用作可迭代对象。