我试图合并两个熊猫DataFrames
,其中(可能)有一些重复的记录。合并按预期工作,但不幸的是,它似乎重置了索引。考虑一个简单的例子:熊猫DataFrame合并重置索引
import pandas as pd
import numpy as np
index = np.arange(10,15)
data = np.arange(10,15)
df1 = pd.DataFrame({'data':data}, index=index)
index = np.arange(12,17)
data = np.arange(12,17)
df2 = pd.DataFrame({'data':data}, index=index)
df3 = df1.merge(df2, how='outer')
这导致:在
# df1: df2: df3:
# ------ # ------ # ------
data data data
10 10 12 12 0 10
11 11 13 13 1 11
12 12 14 14 2 12
13 13 15 15 3 13
14 14 16 16 4 14
5 15
6 16
所以在df1
(10-14)和df2
(12-16)的指标已被取代(0-6)合并df3
。这种行为是否有合理的解释?为什么不是df3
(10-16)中的索引?
唯一的解决办法似乎是索引以df1
和df2
与.reset_index()
复位,执行合并,并在df3
与df3.set_index('index')
重新设置指数,这也导致:
In [97]: df3.index
Out[97]: Int64Index([10, 11, 12, 13, 14, 15, 16], dtype='int64', name='index')
是否有如何获得这个结果,而不需要重置和重新设置索引?
可能遵循的'drop_duplicates()'' –
concat'结合'drop_duplicates()'完成这项工作。但我仍然想知道为什么merge()在我的例子中表现得像这样。我会再等一会儿,看看有没有人可以解释它和/或找到一个干净的方法与'合并'工作,否则我会除了这个作为一个答案 – Bart
@我不能评论为什么合并行为这个方式,但更多信息,你可以查看文档[这里](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.html)。相关位:“如果在列上连接列,DataFrame索引将被忽略,否则,如果连接索引或列上的索引或索引,索引将被传递”。 – nslamberth