1

我正在尝试用 Python 编写一个小程序来跟踪一年多的股票投资组合,所以基本上记录每一次买卖,并跟踪余额。我正在浏览订单列表并更新我保存投资组合的 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

根据Pandas 作者的这个回答set_value,返回对新对象的引用。您需要使用concatappend向数据表中添加行。请参阅 Pandas 手册中的“合并、连接和连接”部分。

于 2013-04-05T19:24:17.293 回答