简体   繁体   中英

Merge a pandas dataframe with a list through an outer join

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM