Pandas合并错误:无法从重复的轴重新索引

时间:2016-12-21 07:50:19

标签: python pandas merge

我最近问了一个问题 Merge pandas dataframe on time and another column 关于合并数据帧并得到一个极好的,一行的答案,与我的测试数据完美配合。但是,当我尝试将其放入我的实际数据时,我收到以下错误:

cannot reindex from a duplicate axis

以下是该问题的一些代码(显示重叠时间戳的微小更改):

a = {'date':['1/1/2015 00:00','1/1/2015 00:15','1/1/2015 00:30'], 'num':[1,2,3]}
b = {'date':['1/1/2015 00:15','1/1/2015 00:30','1/1/2015 00:45'], 'num':[4,5,6]}

dfa = pd.DataFrame(a)
dfb = pd.DataFrame(b)

dfa['date'] = dfa['date'].apply(pd.to_datetime)
dfb['date'] = dfb['date'].apply(pd.to_datetime)

和解决方案:

dfa.set_index('date').combine_first(dfb.set_index('date')).asfreq('15T').reset_index()

上面的代码(包含简单的数据)就像一个魅力,但如果有人知道我的代码在生产中可能出现什么问题,请告诉我。感谢。

是的,在SO上也有类似的问题,但是我没有发现任何处理指数本身会有重复的事实,我希望有人覆盖另一个。

1 个答案:

答案 0 :(得分:2)

问题是您的数据在namedfa中的dfb中有重复(可能两者都有),您可以通过示例模拟它:

a = {'date':['1/1/2015 00:00','1/1/2015 00:00','1/1/2015 00:30'], 'num':[1,2,3]}
b = {'date':['1/1/2015 00:15','1/1/2015 00:30','1/1/2015 00:45'], 'num':[4,5,6]}

dfa = pd.DataFrame(a)
dfb = pd.DataFrame(b)

dfa['date'] = pd.to_datetime(dfa['date'])
dfb['date'] = pd.to_datetime(dfb['date'])

print (dfa)
                 date  num
0 2015-01-01 00:00:00    1
1 2015-01-01 00:00:00    2
2 2015-01-01 00:30:00    3

解决方案是删除重复项:

#keep first duplicates, by default
dfa = dfa.drop_duplicates('date')
print (dfa)
                 date  num
0 2015-01-01 00:00:00    1
2 2015-01-01 00:30:00    3

#keep last duplicates
dfa = dfa.drop_duplicates('date', keep='last')
print (dfa)
                 date  num
1 2015-01-01 00:00:00    2
2 2015-01-01 00:30:00    3