我最近问了一个问题 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上也有类似的问题,但是我没有发现任何处理指数本身会有重复的事实,我希望有人覆盖另一个。
答案 0 :(得分:2)
问题是您的数据在name
或dfa
中的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