-1

私がやろうとしているのは、基本的にDataFrame、インデックスを保持しながら Pandas で 2 つのオブジェクトをマージすることです ( DateTimeIndex)。も もこれをサポートしていませmergeordered_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_newappending する- どの行が表示されないaapl_oldかを見つける方法がわからないaapl_newaapl_old

他に提供する必要がある情報がある場合はお知らせください。

4

2 に答える 2

2

あなたが求めていることを正しく理解していれば(しかし、これはあまり明確ではありません)、次のことを望んでいると思います.

まず、2 つのデータフレームをマージするには、単純に 2 つを連結しますconcat([aapl_old, aapl_new])(これによりインデックスが保持されます)。ただし、重複を削除するには、次の 2 つの戦略を考えることができます。

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 に答える