说我有以下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)。列的顺序很重要,不应更改。
最直接/最优雅的方法是什么?
答案 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.columns
和reindex()
中间的匹配列:
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