[PYTHON] Python / Pandas에서 두 행의 차이 계산하기
PYTHONPython / Pandas에서 두 행의 차이 계산하기
파이썬에서 어떻게 이전 행을 참조하고 그것에 대해 무언가를 계산할 수 있습니까? 특히, 팬더의 데이터 프레임 작업을하고 있습니다. 다음과 같은 주가 정보로 가득 찬 데이터 프레임이 있습니다.
Date Close Adj Close
251 2011-01-03 147.48 143.25
250 2011-01-04 147.64 143.41
249 2011-01-05 147.05 142.83
248 2011-01-06 148.66 144.40
247 2011-01-07 147.93 143.69
다음은이 데이터 프레임을 작성한 방법입니다.
import pandas
url = 'http://ichart.finance.yahoo.com/table.csv?s=IBM&a=00&b=1&c=2011&d=11&e=31&f=2011&g=d&ignore=.csv'
data = data = pandas.read_csv(url)
## now I sorted the data frame ascending by date
data = data.sort(columns='Date')
행 번호 2 또는이 경우 250 (PS - 인덱스) 인 것으로 추측합니다.이 데이터 프레임의 모든 항목에 대해 2011-01-03과 2011-01-04의 차이를 계산하려고합니다. . 적절한 방법은 현재 행을 취한 다음 이전 행을 계산하는 함수를 작성하고 그 차이를 계산하여 pandas를 사용하여 값으로 데이터 프레임을 업데이트하는 함수를 적용하는 것입니다.
이것이 올바른 접근 방법입니까? 그렇다면 색인을 사용하여 차이를 결정해야합니까? (참고 - 나는 여전히 파이썬 초보자 모드이므로 인덱스가 올바른 용어가 아니거나이를 구현하는 올바른 방법이 아닐 수도 있습니다)
해결법
-
==============================
1.나는 당신이 다음과 같이하고 싶다고 생각한다.
나는 당신이 다음과 같이하고 싶다고 생각한다.
In [26]: data Out[26]: Date Close Adj Close 251 2011-01-03 147.48 143.25 250 2011-01-04 147.64 143.41 249 2011-01-05 147.05 142.83 248 2011-01-06 148.66 144.40 247 2011-01-07 147.93 143.69 In [27]: data.set_index('Date').diff() Out[27]: Close Adj Close Date 2011-01-03 NaN NaN 2011-01-04 0.16 0.16 2011-01-05 -0.59 -0.58 2011-01-06 1.61 1.57 2011-01-07 -0.73 -0.71
-
==============================
2.나는 판다 (pandas)를 알지 못합니다. 그러나 순수한 파이썬 솔루션을 제공 하겠지만 판다를 사용해야하는 경우에도 도움이 될 수 있습니다.
나는 판다 (pandas)를 알지 못합니다. 그러나 순수한 파이썬 솔루션을 제공 하겠지만 판다를 사용해야하는 경우에도 도움이 될 수 있습니다.
import csv import urllib # This basically retrieves the CSV files and loads it in a list, converting # All numeric values to floats url='http://ichart.finance.yahoo.com/table.csv?s=IBM&a=00&b=1&c=2011&d=11&e=31&f=2011&g=d&ignore=.csv' reader = csv.reader(urllib.urlopen(url), delimiter=',') # We sort the output list so the records are ordered by date cleaned = sorted([[r[0]] + map(float, r[1:]) for r in list(reader)[1:]]) for i, row in enumerate(cleaned): # enumerate() yields two-tuples: (<id>, <item>) # The try..except here is to skip the IndexError for line 0 try: # This will calculate difference of each numeric field with the same field # in the row before this one print row[0], [(row[j] - cleaned[i-1][j]) for j in range(1, 7)] except IndexError: pass
from https://stackoverflow.com/questions/13114512/calculating-difference-between-two-rows-in-python-pandas by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬에서 기본 __hash__은 무엇입니까? (0) | 2018.10.22 |
---|---|
[PYTHON] shlex.split의 반대는 무엇입니까? (0) | 2018.10.22 |
[PYTHON] 언제 내가 hstack / vstack 대 vstack과 vs column_stack의 연결을 사용해야합니까? (0) | 2018.10.22 |
[PYTHON] pandas DataFrame에서 그룹화 된 데이터의 막대 그래프 그리기 (0) | 2018.10.22 |
[PYTHON] 파이썬 인코딩 utf-8 (0) | 2018.10.22 |