我要做的是基本上在Pandas中合并两个DataFrame
对象,同时保留索引(DateTimeIndex
)。 merge
或ordered_merge
都不支持此功能。
假设我有这样构建的股票数据:
from pandas.io.data import DataReader
from datetime import datetime
aapl_old = DataReader('AAPL', 'yahoo', datetime(2013,1,1), datetime(2013,3,1))
aapl_new = DataReader('AAPL', 'yahoo', datetime(2013,2,1), datetime(2013,4,1))
如何在索引完整的情况下获得最终合并的DataFrame
?
到目前为止我尝试过(并且不起作用):
任何类型的merge
操作 - 据我所知,根本不支持在多对多数据上保留索引
索引切片的一些变体:
aapl_new.ix[aapl_new.ix > aapl_old.ix[-1]]
aapl_new.ix[aapl_new.ix > aapl_old.ix[-1].name]
我认为我可以解决这个问题:
reset_index()
和reindex()
操作 - reindex()
部分遇到很多问题。aapl_new
的唯一索引以及append
aapl_old
的索引 - 不知道如何查找aapl_new
中哪些行未显示在aapl_old
中如果我需要提供更多信息,请告诉我。
答案 0 :(得分:2)
如果我理解你的要求(但这不是很清楚),我想你想要以下内容。
首先,要合并两个数据帧,您只需使用concat([aapl_old, aapl_new])
连接两个数据帧(这将保留索引)。但要删除重复项,您可以考虑两种策略:
1)您只能从aapl_new
中连接那些唯一的(不会出现在aapl_old中)。要选择这些,您可以:
aapl_new[~aapl_new.index.isin(aapl_old.index)]
然后你可以用aapl_old结束:
>>> aapl_new_unique = aapl_new[~aapl_new.index.isin(aapl_old.index)]
>>> pd.concat([aapl_old, aapl_new_unique])
2)您也可以只连接数据帧,然后删除重复的行:
>>> aapl_all = pd.concat([aapl_old, aapl_new])
>>> aapl_all.drop_duplicates()
答案 1 :(得分:1)
然后,您可以使用drop_duplicates()方法删除dupes(如果存在)。