我有一个看起来像这样的df1:
Symbol Order Shares
Date
2009-01-14 AAPL BUY 150
2009-01-21 AAPL SELL 150
2009-01-21 IBM BUY 400
df2看起来像这样:
GOOG AAPL XOM IBM Cash
Date
2009-01-14 NaN NaN NaN NaN NaN
2009-01-21 NaN NaN NaN NaN NaN
我想将第一个DF中的值移动到第二个DF中,以便使股票数量填充在适当的股票代码下。所以上面看起来像:
GOOG AAPL XOM IBM Cash
Date
2009-01-14 NaN 150 NaN NaN NaN
2009-01-21 NaN -150 NaN 400 NaN
如何将第一个数据框中的所有值移到第二个数据框中?
答案 0 :(得分:1)
您真的不需要df2
。您可以使用一些简单的重塑函数df
,set_index
和unstack
直接从reindex
计算结果。您只需要符号列表即可。
(df.assign(Shares=np.where(df.Order == 'BUY', df.Shares, -df.Shares))
.drop('Order', 1)
.set_index('Symbol', append=True)['Shares']
.unstack(1)
.reindex(df2.columns, axis=1)) # you can replace df2.columns with a list
GOOG AAPL XOM IBM Cash
Date
2009-01-14 NaN 150.0 NaN NaN NaN
2009-01-21 NaN -150.0 NaN 400.0 NaN
答案 1 :(得分:1)
如果np.select
然后Order == 'SELL'
,请使用update
将数字转换为负数
df['Shares'] = np.select([df['Order'] == 'SELL'], [-df['Shares']], df['Shares'])
df2.update(df.pivot(None, 'Symbol', 'Shares'))
GOOG AAPL XOM IBM Cash
Date
2009-01-14 NaN 150.0 NaN NaN NaN
2009-01-21 NaN -150.0 NaN 400.0 NaN