Merge a pandas dataframe with a list through an outer join

Viewed 3654

I have a dataframe that looks as follow

   A  B
0  1  4
1  2  5
2  3  6

and a list

names = ['x','y']

I want to get a dataframe that kind of performs and outer join with that list. The desired result is:

   A  B  name
0  1  4  x
1  1  4  y
2  2  5  x
3  2  5  y
4  3  6  x
5  3  6  y
3 Answers

Using pd.concat:

res = pd.concat([df.assign(name=i) for i in names], ignore_index=True)

Result:

   A  B name
0  1  4    x
1  2  5    x
2  3  6    x
3  1  4    y
4  2  5    y
5  3  6    y

Using additional key for merge

df.assign(key=1).merge(pd.DataFrame({'Name':names,'key':1})).drop('key',1)
Out[54]: 
   A  B Name
0  1  4    x
1  1  4    y
2  2  5    x
3  2  5    y
4  3  6    x
5  3  6    y

Comprehension

pd.DataFrame(
    [r + (n,) for r in zip(*map(df.get, df)) for n in names],
    columns=[*df.columns, *['name']]
)

   A  B name
0  1  4    x
1  1  4    y
2  2  5    x
3  2  5    y
4  3  6    x
5  3  6    y
Related