pandas 有什么办法组合一列让列每个元素与该列内的元素除自己外的组合

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循环之类的 效率比较低,谢谢

3个回答

给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)
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问