Сопряжение массивов разной длины в Python - PullRequest
0 голосов
/ 21 октября 2019

Учитывая два массива различной длины:

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

Ответы [ 2 ]

3 голосов
/ 21 октября 2019

Попробуйте 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 можно использовать строковое значениекак итеративный.

1 голос
/ 21 октября 2019

Вы можете сделать простой цикл 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, но общая идея такова:все еще такой же. Единственный важный момент заключается в том, что вы должны перебирать самый длинный список. Может быть, есть более хороший способ сделать это, но это должно помочь вам, если на крайнем случае.

...