Как можно объединить 2 столбца A и B с помощью пользовательской функции, чтобы каждый элемент столбца A объединялся с каждым элементом столбца B . Избегание петель.

A  B
a  1 
b  2
c  3
d  4

Выход:

[a1, a2, a3, a4, b1, b2, b3, b4, c1, c2, c3, c4, d1, d2, d3, d4]

0
MaazKhan47 2 Июл 2019 в 08:10

4 ответа

Лучший ответ

Первый импортный продукт от itertools

from itertools import product

res = pd.DataFrame((product(df['A'],df['B'])),columns=['A',"B"])

Res будет теперь это
каждое значение повторяется для каждого столбца

    A  B
0   a  1
1   a  2
2   a  3
3   a  4
4   b  1
5   b  2
6   b  3
7   b  4
8   c  1
9   c  2
10  c  3
11  c  4
12  d  1

Теперь вы можете выполнять любые пользовательские функции, которые вы хотите применить. Поскольку конкатенация упоминается,

finalList = list(res['A'].astype(str)+res['B'].astype(str))
print(finalList)

Результат:

['a1', 'a2', 'a3', 'a4', 'b1', 'b2', 'b3', 'b4', 'c1', 'c2', 'c3', 'c4', 'd1', 'd2', 'd3', 'd4']
1
tawab_shakeel 2 Июл 2019 в 05:41

Другой способ - использовать MultiIndex.from_product для создания кортежных декартовых произведений и map для выравнивания и объединения их.

pd.MultiIndex.from_product([df.A, df.B]).map('{0[0]}{0[1]}'.format).tolist()

Out[140]:
['a1',
 'a2',
 'a3',
 'a4',
 'b1',
 'b2',
 'b3',
 'b4',
 'c1',
 'c2',
 'c3',
 'c4',
 'd1',
 'd2',
 'd3',
 'd4']
0
Andy L. 2 Июл 2019 в 05:54

Пожалуйста, ознакомьтесь с документами itertools.product, чтобы получить понимание реализации.

Отредактировано так же, как показано ниже для вашей потребности

def product(*args):
    pools = [tuple(pool) for pool in args]
    result = [[]]
    prods = []
    for pool in pools:
        result = [x+[y] for x in result for y in pool]
    for prod in result:
        prods.append(''.join(prod))
    return prods  


product(df['A'], df['B'].astype(str))

выход:
['a1','a2','a3','a4','b1','b2','b3','b4','c1','c2','c3','c4','d1','d2','d3','d4']

1
Shijith 2 Июл 2019 в 06:10

Сделать можно так:

a=['a','b','c','d','e']
b=['1','2','3','4','5']
c=[]
for i in range(0,len(a)):
   c.append(a[i]+b[i])

print(c)
-1
Harshit Gupta 2 Июл 2019 в 05:27