我正在使用Python3.5,我正在使用pandas。我已经从yahoo finance加载了库存数据并将文件保存到csv。我的DataFrames从csv加载这些数据。这是我的DataFrame
的十行csv文件的副本 Date Open High Low Close Volume Adj Close
1990-04-12 26.875000 26.875000 26.625 26.625 6100 250.576036
1990-04-16 26.500000 26.750000 26.375 26.750 500 251.752449
1990-04-17 26.750000 26.875000 26.750 26.875 2300 252.928863
1990-04-18 26.875000 26.875000 26.500 26.625 3500 250.576036
1990-04-19 26.500000 26.750000 26.500 26.750 700 251.752449
1990-04-20 26.750000 26.875000 26.750 26.875 2100 252.928863
1990-04-23 26.875000 26.875000 26.750 26.875 700 252.928863
1990-04-24 27.000000 27.000000 26.000 26.000 2400 244.693970
1990-04-25 25.250000 25.250000 24.875 25.125 9300 236.459076
1990-04-26 25.000000 25.250000 24.750 25.000 1200 235.282663
我知道我可以使用iloc,loc,ix但是我索引的这些值只会给出我特定的行和列,并且不会对每一行执行操作。 例如:open列中的第一行数据值为26.875,下面的行为26.50。价格下跌.375美分。我希望能够捕获前一天增加或减少的百分比,以完成此示例.375除以26.875 =从一天到下一天减少1.4%。我希望能够在每一行上运行此计算,因此我知道它从前一天增加或减少了多少。我尝试过的索引函数但它们是绝对的,我不想使用循环。有没有办法用ix,iloc,loc或其他函数做到这一点?
答案 0 :(得分:27)
您可以使用pct_change()或/和diff()方法
演示:
In [138]: df.Close.pct_change() * 100
Out[138]:
0 NaN
1 0.469484
2 0.467290
3 -0.930233
4 0.469484
5 0.467290
6 0.000000
7 -3.255814
8 -3.365385
9 -0.497512
Name: Close, dtype: float64
In [139]: df.Close.diff()
Out[139]:
0 NaN
1 0.125
2 0.125
3 -0.250
4 0.125
5 0.125
6 0.000
7 -0.875
8 -0.875
9 -0.125
Name: Close, dtype: float64
答案 1 :(得分:0)
MaxU解决方案适合您的情况。如果要基于以前的行执行更复杂的计算,则应使用shift