Как вычесть предыдущую строку из текущей строки в фрейме данных 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