我正在尝试用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的错,而是在代码中错误地放置了更新/写入功能。谢谢你的努力!
答案 0 :(得分:0)
根据Pandas的作者this answer,set_value
返回对新对象的引用。您需要使用concat
或append
向数据表添加行。请参阅Pandas手册中的"Merge, join, and concatenate"部分。