Как вычесть предыдущую строку из текущей строки в фрейме данных pandas и применить ее к каждой строке; без использования цикла?

Я использую Python3.5 и я работаю с пандами. Я загрузил данные о запасах из Yahoo finance и сохранил файлы в csv. Мои фреймы данных загружают эти данные из csv. Это копия десяти строк 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, но эти значения, которые я индексирую, будут давать только мои конкретные строки и столбцы и не будут выполнять операцию над каждой строкой. Например: строка одного из данных в открытом столбце имеет значение 26.875 и строка ниже имеет 26.50. Цена упала .375 центов. Я хочу иметь возможность захватить % увеличения или уменьшения от предыдущего дня, чтобы закончить этот пример .375 деленное на 26,875 = 1,4% снижение с одного дня на другой. Я хочу иметь возможность запускать этот расчет в каждой строке, чтобы знать, насколько он увеличился или уменьшился с предыдущего дня. Индексные функции, которые я пробовал, но они абсолютны, и я не хочу использовать цикл. Есть ли способ сделать это с помощью ix, iloc, loc или другая функция?

1 ответов


можно использовать 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