【发布时间】:2020-05-27 08:38:09
【问题描述】:
看起来这应该很容易,但我无法让它为我的生活工作。
我有一个用于股票数据的数据框,如下所示。如何将以下数据框转换为数据透视表,其中日期为行,股票代码为列,Adj Close 为值(底部图片)
我正在使用以下代码获取数据框:
pricing = web.DataReader(['MSFT', 'AAPL'], 'yahoo', datetime.datetime(2020, 1, 1), datetime.datetime(2020, 2, 10))
编辑:
如果我只是做pricing = web.DataReader(['MSFT', 'AAPL'], 'yahoo', datetime.datetime(2020, 1, 1), datetime.datetime(2020, 2, 10))['Adj Close'],那么我会遇到问题,使用 .loc[] 来使用另一个枢轴的索引抓取数据。
我有第二个数据透视表(如下所示),当我尝试执行 price.loc[pivot2.index] 时出现错误。
错误:
KeyError: "没有 [DatetimeIndex(['1999-01-01', '2000-01-01', '2003-01-01', '2004-01-01',\n '2005-01 -01', '2006-01-01', '2007-01-01', '2008-01-01',\n '2009-01-01', '2010-01-01', '2011-01 -01', '2012-01-01',\n '2013-01-01', '2014-01-01', '2015-01-01', '2016-01-01',\n '2017 -01-01', '2018-01-01', '2019-01-01'],\n dtype='datetime64[ns]', name='date', freq=None)] 在 [index ]"
【问题讨论】:
-
从“编辑”你得到什么错误,你的 pivot2 的索引是否与定价相同?如果定价中缺少索引,您可以考虑使用
reindex而不是 .loc。 -
添加了错误。我猜这是因为定价并不总是有pivot2传递的指数,因为pivot2总是在一年的第二天作为日期传递,但市场并不总是在一年的第二天开放,所以那天不会有输入。如果传入的索引不起作用,是否可以轻松使用最近的日期?还是我需要更新定价数据框以包含每天的数据?
-
您可以使用
pricing.reindex(pivot2.index),这将为缺少的索引返回NaN,并使用ffill或fillna之类的东西,并具有预定值。
标签: python pandas dataframe pivot pivot-table