我有一个带有三个字符串列的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
任何想法最有效的方法是什么?
答案 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)