2016-09-13 11 views
5

Używam Python3.5 i pracuję z pandami. Załadowałem dane giełdowe z finansów yahoo i zapisałem je do pliku csv. Moje DataFrames ładują te dane z pliku CSV. To jest kopia z dziesięciu wierszy pliku CSV, który jest moim DataFrameJak odjąć poprzedni wiersz od bieżącego wiersza w ramce danych pandy i zastosować go do każdego wiersza; bez użycia pętli?

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 

wiem, że mogę używać iloc, loc, IX ale te wartości, które ja indeksu dadzą tylko moje konkretne wiersze i kolumny i będzie nie wykonuje operacji w każdym rzędzie. Na przykład: Wiersz jednego z danych w otwartej kolumnie ma wartość 26,875, a wiersz poniżej ma wartość 26,50. Cena spadła .375 centów. Chcę móc uchwycić% wzrostu lub zmniejszenia z poprzedniego dnia, aby zakończyć ten przykład .375 podzielony przez 26.875 = 1,4% spadku z jednego dnia na dzień. Chcę móc wykonywać te obliczenia w każdym rzędzie, więc wiem, ile wzrosło lub zmniejszyło się z poprzedniego dnia. Funkcje indeksowe, które wypróbowałem, ale są absolutne i nie chcę używać pętli. Czy jest sposób, w jaki mogę to zrobić za pomocą ix, iloc, loc lub innej funkcji?

+0

co 'df.Close.pct_change()'? – MaxU

+0

Taka zmiana powinna zadziałać Właśnie podniosłem to spojrzenie, ponieważ szukałem czegoś takiego również spróbuję close.pct Wy odpowiedzieliście na moje pytanie, dziękuję – ZacAttack

+1

Być może źle zrozumiałem twoje pytanie, ale czy nie możesz tego zrobić 'df .iloc [1 :,:] - df.iloc [: - 1,:] 'gdzie można dostosować go do nazw/indeksów kolumn, jeśli chcesz zastosować tylko do określonych kolumn? – Andrew

Odpowiedz

14

można użyć pct_change() lub/i diff() metod

Demo:

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 
+0

Dzięki za napisanie kodu, odpowiem poprawnie, kiedy pozwoli mi – ZacAttack

Powiązane problemy