web-dev-qa-db-ja.com

pandas dataframeの現在の行から前の行を減算し、ループを使用せずにすべての行に適用するにはどうすればよいですか?

私はPython3.5を使用しており、パンダで作業しています。私はyahoo Financeから株式データをロードし、ファイルをcsvに保存しました。 My DataFramesは、csvからこのデータをロードします。これは、私のDataFrameであるcsvファイルの10行のコピーです

  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を使用できることを知っていますが、インデックスを付けるこれらの値は特定の行と列のみを提供し、すべての行で操作を実行しません。例:開いている列のデータの行1の値は26.875で、その下の行の値は26.50です。価格は0.375セント下落しました。前の日からの増加または減少の%をキャプチャして、この例を完了するために、.375を26.875で割って=ある日から次の日への1.4%の減少にしたいと思います。すべての行でこの計算を実行できるようにしたいので、前日からどれだけ増加または減少したかがわかります。私が試したインデックス関数は絶対ですが、ループを使いたくありません。 ix、iloc、loc、または別の関数でこれを行う方法はありますか?

13
ZacAttack

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
29
MaxU

MaxUソリューションはあなたのケースに適しています。前の行に基づいてより複雑な計算を実行する場合は、 shift を使用する必要があります

0
vozman