我知道这可能很简单,但我一直试图解决这个问题,我需要它来完成很多功能。
我有一个包含2列的DataFrame,两个都有股价数据。
我想在一个名为'returns'的新数据框中计算2个新列,每列的名称与第一列相同(即'AAPL'和'GOOG')。
我使用此程序获取原始数据并创建“数据”数据框:
names = ['AAPL', 'GOOG']
def get_data(stock, start, end):
return web.get_data_yahoo(stock, start, end)['Adj Close']
data = pd.DataFrame({n: get_data(n, '1/1/2009', '6/1/2012') for n in names})
我知道可以使用(来自pandas库)生成返回:
returns = pd.DataFrame(index=data.index)
returns['*COLUMN A*'] = data['*COLUMN A*'].pct_change()
但是我猜我需要使用某种循环来迭代“名字”或列,但是我无法使用任何东西。
非常感谢任何帮助。我很抱歉,如果我一直很模糊,但这是我的第一个问题,我通过论坛搜索了30分钟:)
答案 0 :(得分:0)
您可以在整个df上使用pct_change
In [15]: df = DataFrame(np.random.randint(20,size=20).reshape(10,2),
columns=['AAPL','GOOG'],index=date_range('20130101',periods=10))+50
In [16]: df
Out[16]:
AAPL GOOG
2013-01-01 53 54
2013-01-02 66 64
2013-01-03 50 59
2013-01-04 53 57
2013-01-05 67 65
2013-01-06 61 55
2013-01-07 68 52
2013-01-08 64 65
2013-01-09 62 62
2013-01-10 66 50
In [17]: 100*df.pct_change()
Out[17]:
AAPL GOOG
2013-01-01 NaN NaN
2013-01-02 24.528302 18.518519
2013-01-03 -24.242424 -7.812500
2013-01-04 6.000000 -3.389831
2013-01-05 26.415094 14.035088
2013-01-06 -8.955224 -15.384615
2013-01-07 11.475410 -5.454545
2013-01-08 -5.882353 25.000000
2013-01-09 -3.125000 -4.615385
2013-01-10 6.451613 -19.354839