首页 > 解决方案 > Pandas - 如何比较一列的两个连续行

问题描述

我想找到一列的两个连续行的百分比差异,如果差异大于 10%,我想返回第一个值。例如,在下面的数据中,我想找到 df.close[0] 和 df.close[1] 之间的百分比差异,如果差异大于 10,那么我希望 df.close[0] 的值为df.close[1] 如果差值小于 10,那么我想为 df.close[0] 和 df.close[1] 保留相同的值,该怎么做=?

           1. open  2. high   3. low  4. close  5. volume
date                                                      
2000-01-03  41.7917  42.5000  40.8333   41.2500  2006460.0
2000-01-04  41.0833  41.0833  38.2500   39.2917  3392856.0
2000-01-05  37.2083  37.2083  34.0000   34.5500  4344624.0
2000-01-06  34.5000  36.3333  34.5000   35.6708  2219904.0
2000-01-07  39.1667  43.2500  38.6667   43.2500  7155936.0

我尝试了以下代码,但似乎不起作用:

def percentage_diff(x):
  if (abs((x[0]-x[1]/x[0])*100)>10):
    return x[0]
  else:
    return x[1]

df.close = pd.rolling_apply(df['close'], 2, percentage_diff)

标签: pythonpython-3.xpandasdataframe

解决方案


通过使用以下功能,我能够解决问题。

def percentage_diff(x):
  per = (abs((x[0] - x[1]))/x[1] *100)
  if (per > 30):
    return min(x[0], x[1])
  else:
    return x[0]

在我最初的问题中,如果百分比差异大于 10,我将返回 x[0] 或 x[1],这只是将值转移到下一行,并没有真正删除 anamoly

def percentage_diff(x):
  if (abs((x[0]-x[1]/x[0])*100)>10):
    return x[0]
  else:
    return x[1]

df.close = pd.rolling_apply(df['close'], 2, percentage_diff)

推荐阅读