计算Python/Pandas中两行之间的差异

mik*_*sey 46 python pandas

在python中,如何引用前一行并针对它进行计算?具体来说,我有工作dataframespandas-我有一个数据帧充满看起来像这样的股票价格信息:

           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
Run Code Online (Sandbox Code Playgroud)

以下是我创建此数据框的方法:

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')
Run Code Online (Sandbox Code Playgroud)

从第2行开始,或者在这种情况下,我猜它是250(PS - 是索引吗?),我想计算2011-01-03和2011-01-04之间的差异,对于这个数据框中的每个条目.我认为合适的方法是编写一个获取当前行的函数,然后计算出前一行,并计算它们之间的差异,使用pandas apply函数来更新数据帧的值.

这是正确的方法吗?如果是这样,我应该使用索引来确定差异吗?(注意 - 我仍处于python初学者模式,因此索引可能不是正确的术语,甚至也不是正确的实现方式)

Cha*_*She 81

我想你想做这样的事情:

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
Run Code Online (Sandbox Code Playgroud)

  • 很好,但是如何将其添加为数据的新列呢? (2认同)

Msq*_*re 10

计算一列的差异。这是你可以做的。

df=
      A      B
0     10     56
1     45     48
2     26     48
3     32     65
Run Code Online (Sandbox Code Playgroud)

我们只想计算 A 中的行差异,并想考虑小于 15 的行。

df['A_dif'] = df['A'].diff()
df=
          A      B      A_dif
    0     10     56      Nan
    1     45     48      35
    2     26     48      19
    3     32     65      6
df = df[df['A_dif']<15]

df=
          A      B      A_dif
    0     10     56      Nan
    3     32     65      6
Run Code Online (Sandbox Code Playgroud)