【问题标题】:Expand pandas dataframe展开熊猫数据框
【发布时间】:2020-06-16 16:41:03
【问题描述】:

我手头有一个庞大的股票数据集(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

即即使某些库存在某个时间点不存在,我也想创建某种形式的占位符。我怎样才能以有效的方式实现这一目标?谢谢。

【问题讨论】:

  • 所以简而言之,您希望在当天没有价值的股票回报中获得 NaN?
  • @RobertRedisch 完全正确。我只是在描述中添加了这个注释。谢谢。
  • 找到链接:这应该有助于link。不要认为值得在 SO 上重新讨论已经解决的问题

标签: python pandas dataframe


【解决方案1】:

使用unstackmelt 的替代解决方案:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 2016-11-29
    • 2021-11-09
    • 2018-01-07
    相关资源
    最近更新 更多