为了账号安全,请及时绑定邮箱和手机立即绑定

使用熊猫合并时如何保持索引

使用熊猫合并时如何保持索引

大话西游666 2019-11-25 15:46:29
我想合并两个DataFrames,并保留第一帧的索引作为合并数据集中的索引。但是,当我进行合并时,所得的DataFrame具有整数索引。如何指定要保留左侧数据框中的索引?In [4]: a = pd.DataFrame({'col1': {'a': 1, 'b': 2, 'c': 3},                           'to_merge_on': {'a': 1, 'b': 3, 'c': 4}})In [5]: b = pd.DataFrame({'col2': {0: 1, 1: 2, 2: 3},                           'to_merge_on': {0: 1, 1: 3, 2: 5}})In [6]: aOut[6]:   col1  to_merge_ona     1            1b     2            3c     3            4In [7]: bOut[7]:   col2  to_merge_on0     1            11     2            32     3            5In [8]: a.merge(b, how='left')Out[8]:   col1  to_merge_on  col20     1            1   1.01     2            3   2.02     3            4   NaNIn [9]: _.indexOut[9]: Int64Index([0, 1, 2], dtype='int64')编辑:切换到示例代码,可以轻松地复制
查看完整描述

3 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

In [5]: a.reset_index().merge(b, how="left").set_index('index')

Out[5]:

       col1  to_merge_on  col2

index

a         1            1     1

b         2            3     2

c         3            4   NaN

注意:如果和之间存在多个匹配项,则对于某些左合并操作,您可能最终会得到更多行a,b并且需要进行重复数据删除(有关重复数据删除的文档)。这就是为什么熊猫不为您保留索引的原因。


查看完整回答
反对 回复 2019-11-25
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

有一个非pd.merge解决方案。使用map和set_index


In [1744]: a.assign(col2=a['to_merge_on'].map(b.set_index('to_merge_on')['col2']))

Out[1744]:

   col1  to_merge_on  col2

a     1            1   1.0

b     2            3   2.0

c     3            4   NaN

并且,不要index为索引引入虚拟名称。


查看完整回答
反对 回复 2019-11-25
?
万千封印

TA贡献1891条经验 获得超3个赞

您可以在左侧数据框上复制索引并进行合并。


a['copy_index'] = a.index

a.merge(b, how='left')

我发现在处理大型数据框和使用pd.merge_asof()(或dd.merge_asof())时,此简单方法非常有用。


当重置索引很昂贵(大数据帧)时,这种方法会更好。


查看完整回答
反对 回复 2019-11-25
  • 3 回答
  • 0 关注
  • 516 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号