我手头有一个庞大的股票数据集(在60年中约有1万个独特的股票)。可用库存数据的数量随时间而变化。现在,鉴于我知道所有独特的股票,我想对数据框进行某种形式的放大,如下所示:
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
即即使在某个时间点不存在某些库存,我也想创建某种形式的占位符。我怎样才能有效地做到这一点?谢谢。
答案 0 :(得分:1)
使用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