在熊猫中合并多个数据框

时间:2019-08-26 14:04:34

标签: pandas dataframe merge

我有两个数据框: df1如下:

  col0 col1  col1.1  col3
0    a    d       1     6
1    b    e       5     7

df2如下:

  colx  coly
0    a    10
1    b    20
2    d    50
3    e    40

我如何就地合并数据帧,以使最终的df看起来像这样?

  col0 col1  col1.1  col3  colx coly
0    a    d       1     6   10   50
1    b    e       5     7   20   40

据我了解,pandas中的merge方法基于给定的轴合并两个数据帧。 在这种情况下,我想基于另一个数据框中的值来合并它们。在这种情况下,我要寻找什么功能?

5 个答案:

答案 0 :(得分:4)

使用merge链接两次:

mrg = df1.merge(df2, left_on='col0', right_on='colx')\
         .merge(df2, left_on='col1', right_on='colx')\
         .drop(columns=['colx_x', 'colx_y'])

输出

  col0 col1  col1.1  col3  coly_x  coly_y
0    a    d       1     6      10      50
1    b    e       5     7      20      40

答案 1 :(得分:3)

您可以使用fclose

map

输出:

mapper = df2.set_index('colx')['coly']
df1['colx'] = df1['col0'].map(mapper)
df1['coly'] = df1['col1'].map(mapper)

print(df1)

答案 2 :(得分:2)

使用applymapconst options = { enableHighAccuracy: true, timeout: 5000, maximumAge: 0 }; navigator.geolocation.getCurrentPosition( success, error, options ); success = (pos) => { console.log(pos); }

get

s=df2.set_index('colx')['coly']
df1[['colx','coly']]=df1.iloc[:,:2].applymap(lambda x: s.get(x))
print(df1)

答案 3 :(得分:1)

使用65001 : Unicode(UTF8)的另一种解决方案:

replace

输出:

dct = df2.set_index('colx')['coly'].to_dict()
df1['coly_x'] = df1['col0'].replace(dct)
df1['coly_y'] = df1['col1'].replace(dct)

答案 4 :(得分:0)

这是连接索引的方法:

df1.join([df2.iloc[0:2,1].rename('colx'),
          df2.iloc[2:,1].rename('coly').reset_index(drop=True)])

提取,设置子集并重命名所需列的元素。第二个系列的索引被重置为匹配。然后将它们加入df1。

这将返回

  col0 col1  col1.1  col3  colx  coly
0    a    d       1     6    10    50
1    b    e       5     7    20    40