-1

我要做的基本上是合并DataFramePandas 中的两个对象,同时保留索引(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]
    

我认为我可以如何解决这个问题:

  • 不同版本的索引切片 - 我是否以错误的方式接近这个?
  • Areset_index()reindex()操作 - 零件有很多麻烦reindex()
  • 查找唯一的索引和aapl_new索引- 不知道如何找到哪些行没有出现在appendaapl_oldaapl_newaapl_old

如果我需要提供更多信息,请告诉我。

4

2 回答 2

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()
于 2013-09-05T07:15:50.170 回答
1
  • 创建第一个数据框
  • df.append(new_dataframe) # 假设结构正确

然后,您可以使用 drop_duplicates() 方法删除重复项(如果存在)。

于 2013-09-05T09:26:55.620 回答