猿问

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

我想合并两个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]: a

Out[6]:

   col1  to_merge_on

a     1            1

b     2            3

c     3            4


In [7]: b

Out[7]:

   col2  to_merge_on

0     1            1

1     2            3

2     3            5


In [8]: a.merge(b, how='left')

Out[8]:

   col1  to_merge_on  col2

0     1            1   1.0

1     2            3   2.0

2     3            4   NaN


In [9]: _.index

Out[9]: Int64Index([0, 1, 2], dtype='int64')

编辑:切换到示例代码,可以轻松地复制


大话西游666
浏览 517回答 3
3回答

holdtom

In [5]: a.reset_index().merge(b, how="left").set_index('index')Out[5]:       col1  to_merge_on  col2indexa         1            1     1b         2            3     2c         3            4   NaN注意:如果和之间存在多个匹配项,则对于某些左合并操作,您可能最终会得到更多行a,b并且需要进行重复数据删除(有关重复数据删除的文档)。这就是为什么熊猫不为您保留索引的原因。

喵喵时光机

有一个非pd.merge解决方案。使用map和set_indexIn [1744]: a.assign(col2=a['to_merge_on'].map(b.set_index('to_merge_on')['col2']))Out[1744]:   col1  to_merge_on  col2a     1            1   1.0b     2            3   2.0c     3            4   NaN并且,不要index为索引引入虚拟名称。

万千封印

您可以在左侧数据框上复制索引并进行合并。a['copy_index'] = a.indexa.merge(b, how='left')我发现在处理大型数据框和使用pd.merge_asof()(或dd.merge_asof())时,此简单方法非常有用。当重置索引很昂贵(大数据帧)时,这种方法会更好。
随时随地看视频慕课网APP

相关分类

Python
我要回答