pandas 有什么办法组合一列让列每个元素与该列内的元素除自己外的组合,或者说两列让一列内的每一个元素都和对面列的每个元素组合起来下面举个栗子:
A=
name TYPE
0 A1 MW1
1 A2 MW2
2 A3 MW3
3 A4 MW4
4 A5 MW5
B =
name2 TYPE2
0 B6 MW6
1 B7 MW7
2 B8 MW8
3 B9 MW9
4 B0 MW0
output:
name TYPE name2 TYPE2
0 A1 MW1 B6 MW6
1 A1 MW1 B7 MW7
2 A1 MW1 B8 MW8
3 A1 MW1 B9 MW9
4 A1 MW1 B0 MW0
5 A2 MW2 B6 MW6
6 A2 MW2 B7 MW7
7 A2 MW2 B8 MW8
.
.
.
.
.
类推
因为pandas没有numpy的np.newaxis关键字可以变形多维数组然后匹配,一时想不起有什么更好的方法,所以想请教下pandas怎么实现这个。尽量不要用for循环之类的 效率比较低,谢谢
你这个叫做笛卡尔集
https://blog.csdn.net/u010063879/article/details/80161741
给A,B各增加一个相同的常量字段,如flag,他的隔行之都为0,然后使用pd.merge拼接,单后删掉flag字段,
代码如下:
import numpy as np
flag1=pd.DataFram(np.zero(len(A)),columns=['flag',])
flag2=pd.DataFram(np.zero(len(B)),columns=['flag',])
A=pd.concat([A,flag1],axis=1)
B=pd.concat([B,flag2],axis=1)
res=pd.merge(a,b)
res=res.drop('flag',axis=1,inplace=True)
res就是需要的结果
方法感觉比较土,使用拼接的方式
res = A.append([A]*(B.index.size-1), ignore_index=True).sort_values('name')
res2 = B.append([B]*(A.index.size-1), ignore_index=True)
res[res2.columns.tolist()] = res2
print(res)