如何比较上一行的值的百分比差异
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
用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