1

Python で小さなプログラムを作成して、株式ポートフォリオを 1 年以上追跡しようとしているので、基本的にすべての売買を登録し、残高を追跡します。注文のリストを調べて、ポートフォリオを保持する Pandas データフレームを更新します。コードはかなりあいまいに見えますが、私は Pandas/numpy にはまったく慣れていません:

orders_book = DataFrame(np.zeros((num_of_days,num_of_companies+1)), ldt_timestamps, columns = book_keys)

for equity_sym in ls_symbols[1:2]:
    for trade_date in ldt_timestamps:
        if trade_date == ldt_timestamps[0]:
            current_number = orders_book.xs(trade_date)[equity_sym]
        for transaction in trades:
            transaction_date = transaction[0]
            transaction_sym  = transaction[1]
            if ( ( trade_date == transaction_date ) and (equity_sym == transaction_sym ) ):
                transaction_order  = transaction[2]
                transaction_number =  transaction[3]
                if str(transaction_order) == 'Buy':
                    current_number += transaction_number
                if str(transaction_order) == 'Sell':
                    current_number -= transaction_number
        orders_book.ix[trade_date,equity_sym, current_number] = current_number

[equity_sym] この複雑なループが正常に動作することを実行時に出力して確認したことを納得させるために、コメントを残しておきました (ご覧のとおり、 をorders_book使用して更新していますset_value)。ただし、ループが終了すると、単純に試してみると、最初のようprint orders_book['GOOG']orders_book見えます。つまり、ループの前です。何故ですか?助けていただければ幸いです:)

編集: コードは現在変更されており、適切に動作します。これは Panda のせいではなく、コード内の更新/書き込み関数の配置が間違っていました。ありがとうございます!

4

1 に答える 1

0

パンダの作者によるこの回答によるとset_value、新しいオブジェクトへの参照を返します。concat 行を使用するかappend、データ テーブルに行を追加する必要があります。Pandas マニュアルの「マージ、結合、および連結」セクションを参照してください 。

于 2013-04-05T19:24:17.293 に答える