Применение функции к каждому элементу одного столбца с каждым элементом другого столбца - PullRequest
0 голосов
/ 02 июля 2019

Как можно объединить 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]

Ответы [ 4 ]

1 голос
/ 02 июля 2019

Пожалуйста, ознакомьтесь с документацией 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 голос
/ 02 июля 2019

Первый импортный продукт из 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']
0 голосов
/ 02 июля 2019

Другим способом является использование 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 голосов
/ 02 июля 2019

Вы можете сделать так:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...