我有两个数据框:
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方法基于给定的轴合并两个数据帧。 在这种情况下,我想基于另一个数据框中的值来合并它们。在这种情况下,我要寻找什么功能?
答案 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)
使用applymap
和const 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