Как перенести значения из одного кадра данных в другой в пандах? - PullRequest
2 голосов
/ 07 марта 2019

У меня есть 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 во второе, чтобы количество акций попало под соответствующий символ акции. Таким образом, вышеприведенное будет выглядеть так:

           GOOG AAPL  XOM  IBM Cash
Date                               
2009-01-14  NaN  150  NaN  NaN  NaN
2009-01-21  NaN  -150 NaN  400  NaN

Как мне переместить все значения, которые у меня есть в моем первом кадре данных, во второй?

Ответы [ 2 ]

1 голос
/ 07 марта 2019

Используйте 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
1 голос
/ 07 марта 2019

Тебе действительно не нужно 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...