将函数应用于一列的每个元素和另一列的每个元素

Applying a function to every element of one column with every element of other column

如何使用自定义函数连接 A 和 B 两列,以便 A 列 的每个元素都与 B 列[的每个元素连接=19=]。避免循环。

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]

你可以这样做:

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)

首先从 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']

另一种方法是使用 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']

请查看 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))

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