熊猫表中的外部联接

时间:2019-03-08 20:42:58

标签: python pandas

我有一个带有三个字符串列的PANDAS数据框,看起来像这样:

Name     Surname    MiddleName
James    Bond       A
Maggie   Sweenie    B

我想在表中创建一种外部联接,以便输出名称,姓氏和中间名的每种可能的组合。我正在寻找的输出是:

Name     Surname    MiddleName
James    Bond       A
Maggie   Sweenie    B
James    Sweenie    A
James    Sweenie    B
Maggie   Bond       A
Maggie   Bond       B

任何想法最有效的方法是什么?

3 个答案:

答案 0 :(得分:4)

IIUC使用product

import itertools 
yourdf=pd.DataFrame(list(itertools.product(*df.values.T.tolist())),columns=df.columns)
yourdf
Out[937]: 
     Name  Surname MiddleName
0   James     Bond          A
1   James     Bond          B
2   James  Sweenie          A
3   James  Sweenie          B
4  Maggie     Bond          A
5  Maggie     Bond          B
6  Maggie  Sweenie          A
7  Maggie  Sweenie          B

答案 1 :(得分:1)

您正在寻找一种expand_grid功能,可以使用itertools.product()来实现。在pandas documentation中,您可以定义expand_grid

import itertools

def expand_grid(data_dict):
     rows = itertools.product(*data_dict.values())
     return pd.DataFrame.from_records(rows, columns=data_dict.keys())

expand_grid(df.to_dict('list'))  
Out[38]: 
     Name  Surname MidName
0   James     Bond       A
1   James     Bond       B
2   James  Sweenie       A
3   James  Sweenie       B
4  Maggie     Bond       A
5  Maggie     Bond       B
6  Maggie  Sweenie       A
7  Maggie  Sweenie       B 

答案 2 :(得分:0)

没有itertools:

pd.MultiIndex.from_product(df.T.values.tolist()).to_frame(index=False)