如何从pandas数据帧中的当前行中减去前一行并将其应用于每一行; 没有使用循环?

Zac*_*ack 13 python indexing numpy dataframe pandas

我正在使用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
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用iloc,loc,ix,但我索引的这些值只会给出我的特定行和列,并且不会对每一行执行操作.例如:open列中的第一行数据值为26.875,下面的行为26.50.价格下跌.375美分.我希望能够捕获前一天增加或减少的百分比,以完成此示例.375除以26.875 =从一天到下一天减少1.4%.我希望能够在每一行上运行此计算,因此我知道它从前一天增加或减少了多少.我尝试过的索引函数但它们是绝对的,我不想使用循环.有没有办法用ix,iloc,loc或其他函数做到这一点?

Max*_*axU 33

你可以使用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
Run Code Online (Sandbox Code Playgroud)


voz*_*man 5

MaxU 解决方案适合您的情况。如果您想根据之前的行执行更复杂的计算,您应该使用shift

  • 请不要写仅链接的答案 (4认同)
  • 在这种情况下,这仅充当“答案”的链接。这是带有相邻信息的旁白答案。 (3认同)