Развернуть pandas фрейм данных - PullRequest
0 голосов
/ 16 июня 2020

У меня есть большой набор данных об акциях (~ 10 тыс. Уникальных запасов за 60 лет). Количество доступных данных о запасах меняется со временем. Теперь, учитывая, что я знаю все уникальные акции, я хотел бы применить какое-то расширение моего фрейма данных, например:

given = pd.DataFrame({"Date":[1, 1, 2, 2, 2], 
                   "Stock":['Stock 2', 'Stock 1', 'Stock 1', 'Stock 2', 'Stock 3'], 
                   "Return":[0.05, 0.02, 0.01, -0.02, 0]}) 


target = pd.DataFrame({"Date":[1, 1, 1, 2, 2, 2], 
                   "Stock":['Stock 2', 'Stock 1', 'Stock 3','Stock 1', 'Stock 2', 'Stock 3'], 
                   "Return":[0.05, 0.02, np.nan, 0.01, -0.02, 0]}) 

   Date    Stock  Return
0     1  Stock 2    0.05
1     1  Stock 1    0.02
2     2  Stock 1    0.01
3     2  Stock 2   -0.02
4     2  Stock 3    0.00

   Date    Stock  Return
0     1  Stock 2    0.05
1     1  Stock 1    0.02
2     1  Stock 3     NaN
3     2  Stock 1    0.01
4     2  Stock 2   -0.02
5     2  Stock 3    0.00

Т.е. даже если некоторые акции не существовали в какой-то момент времени, я хотел бы создать некоторую форму заполнителя. Как я могу добиться этого эффективным способом? Спасибо.

1 Ответ

1 голос
/ 16 июня 2020

Альтернативное решение с использованием unstack и melt:

target = given.set_index(['Date', 'Stock']).unstack().droplevel(0, 1)
target = target.reset_index().melt('Date', var_name='Stock', value_name='Return').sort_values(by='Date')

# target
   Date    Stock  Return
0     1  Stock 1    0.02
1     1  Stock 2    0.05
2     1  Stock 3     NaN
3     2  Stock 1    0.01
4     2  Stock 2   -0.02
5     2  Stock 3    0.00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...