使用Pandas 解决问题
我有这个数据集这是一个问题:对于用户选择的公共交通类型,显示平均出行距离比前一年下降至少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
如果下降超过5%,它将比较2005年的数据和2004年的数据,如果是,打印出来,如果不是,继续扫描。
预期输出:";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