用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例如:如果我选择"Bus":以便更容易地可视化该数据列:
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%的减幅。
发布于 2022-02-28 17:48:29
您可以按照条件的值添加一个列(每种传输方式):
df['hasDecreasedMarkedly'] = (df['Bus'] - df['Bus'].shift(1))/df['Bus'] >= 0.05发布于 2022-02-28 17:57:04
你可以使用熊猫.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 Truehttps://stackoverflow.com/questions/71298975
复制相似问题