如何将值从一个数据框移动到另一个熊猫中?

时间:2019-03-07 20:18:59

标签: python pandas dataframe

我有一个看起来像这样的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

如何将第一个数据框中的所有值移到第二个数据框中?

2 个答案:

答案 0 :(得分:1)

您真的不需要df2。您可以使用一些简单的重塑函数dfset_indexunstack直接从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