将几列插入另一个DataFrame

时间:2019-06-28 09:13:20

标签: python pandas

说我有以下DataFrame df1:

name    course   yob     city
paul    A        1995    london
john    A        2005    berlin
stacy   B        2015    vienna
mark    D        2013    madrid

还有以下DataFrame df2:

name    height   occupation   
paul    185      student    
mark    162      pilot

我想将它们结合起来以获得:

name    course   height   occupation   yob     city
paul    A        185      student      1995    london
john    A        NaN      NaN          2005    berlin
stacy   B        NaN      NaN          2015    vienna
mark    D        162      pilot        2013    madrid

所以我的想法是我有df1,这是我的主要数据结构,我想将df2的列(仅包含有关某些名称的信息)插入df1中的特定位置(即在这种情况下,列课程和yob)。列的顺序很重要,不应更改。

最直接/最优雅的方法是什么?

2 个答案:

答案 0 :(得分:2)

不清楚您要左连接还是外连接。这是左联接的简单方法

我将第一个数据帧用作df1,将第二个数据帧用作df2

import pandas as pd

df_result = pd.merge (left=df1, right=df2, how='left', on='name')
# Reorder the columns
df_result = df_result[["name", "course", "height", "occupation", "yob", "city"]]

print(df_result)

如果要外部联接

df_result = pd.merge (left=df1, right=df2, how='outer', on='name')

答案 1 :(得分:1)

将合并一种通用方法,然后使用df2.columns创建一个列表,排除列表df1.columnsreindex()中间的匹配列:

final=df1.merge(df2,on='name',how='left')
l=list(df1.columns)
s=l[:len(l)//2]+list(df2.columns.difference(df1.columns))+l[len(l)//2:]
#['name', 'course', 'height', 'occupation', 'yob', 'city']

然后在axis=1上使用reindex()

final=final.reindex(s,axis=1)
print(final)

    name course  height occupation   yob    city
0   paul      A   185.0    student  1995  london
1   john      A     NaN        NaN  2005  berlin
2  stacy      B     NaN        NaN  2015  vienna
3   mark      D   162.0      pilot  2013  madrid