如何比较上一行的值的百分比差异

How to compare values from previous row for % difference

用Pandas

求解

我有这个数据集 这是问题: 对于用户选择的 public 交通类型,显示平均出行距离比上一年至少下降 5% 的年份和平均出行距离。

     Year  MRT  LRT  Bus  Taxi

0   2004  11.5  0.0  5.2   8.5
1   2005  11.5  0.0  5.4   8.8
2   2006  11.3  0.0  5.3   9.1
3   2007  11.2  0.0  5.3   9.7
4   2008  11.2  2.1  5.3   9.0
5   2009  10.8  2.1  5.1   9.0
6   2010  10.3  2.1  4.8   9.3
7   2011  10.0  2.0  4.5   9.6
8   2012   9.6  1.0  4.4   9.7
9   2013   9.5  2.0  4.3   9.8
10  2014   9.2  2.0  4.3  10.0

例如。如果我选择“巴士”: 为了更容易地可视化该数据列:

    Year  Bus
0   2004  5.2
1   2005  5.4
2   2006  5.3
3   2007  5.3
4   2008  5.3
5   2009  5.1
6   2010  4.8
7   2011  4.5
8   2012  4.4
9   2013  4.3
10  2014  4.3

比较2005年的数据和2004年的数据,如果下降超过5%,如果是打印出来,如果不是,继续扫描。

预期输出: “2010年的数据是4.8,比去年下降了5%以上 前一年" (注:5.1 * 0.95 = 4.85)

“2011年数据为4.5,比上一年下降了5%以上” (注:4.8 * 0.95 = 4.56)

我在考虑 for 循环,但我不太确定如何使用它来比较 5% 的递减。

您可以添加一个列(按运输方式)以获取您的条件值:

df['hasDecreasedMarkedly'] = (df['Bus'] - df['Bus'].shift(1))/df['Bus'] >= 0.05

您可以使用 pandas .pct_change().

import pandas as pd

df = pd.DataFrame({'Year': {0: 2004,
  1: 2005,
  2: 2006,
  3: 2007,
  4: 2008,
  5: 2009,
  6: 2010,
  7: 2011,
  8: 2012,
  9: 2013,
  10: 2014},
 'Bus': {0: 5.2,
  1: 5.4,
  2: 5.3,
  3: 5.3,
  4: 5.3,
  5: 5.1,
  6: 4.8,
  7: 4.5,
  8: 4.4,
  9: 4.3,
  10: 4.3}})

df['pct_change']= df['Bus'].pct_change()

df['5 pct change'] = df['pct_change'] < -0.05

输出:

Year        Bus    pct_change       5 pct change
0   2004    5.2    NaN              False
1   2005    5.4    0.038462         False
2   2006    5.3   -0.018519         False
3   2007    5.3    0.000000         False
4   2008    5.3    0.000000         False
5   2009    5.1   -0.037736         False
6   2010    4.8   -0.058824         True
7   2011    4.5   -0.062500         True
8   2012    4.4   -0.022222         False
9   2013    4.3   -0.022727         False
10  2014    4.3    0.000000         False

要打印出你的要求,“如果下降超过5%,如果是打印出来,如果不是,继续扫描”你可以这样做。

(print(df.loc[df['5 pct change'] == True]))

打印如下:

   Year  Bus    pct_change        5 pct change
6  2010  4.8   -0.058824          True
7  2011  4.5   -0.062500          True