복붙노트

[PYTHON] Python / Pandas에서 두 행의 차이 계산하기

PYTHON

Python / 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. ==============================

    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. ==============================

    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
    
  3. from https://stackoverflow.com/questions/13114512/calculating-difference-between-two-rows-in-python-pandas by cc-by-sa and MIT license