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

时间:2019-07-02 05:10:53

标签: python pandas numpy cartesian-product cross-product

如何使用自定义功能将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 个答案:

答案 0 :(得分:1)

首次从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 :(得分:1)

请查看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']

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

您可以这样做:

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)