我試圖合併兩個熊貓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