首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何比较上一行的值以获得%差异

如何比较上一行的值以获得%差异
EN

Stack Overflow用户
提问于 2022-02-28 17:44:40
回答 2查看 84关注 0票数 1

用Pandas解决

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

代码语言:javascript
复制
     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":以便更容易地可视化该数据列:

代码语言:javascript
复制
    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%的减幅。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-28 17:48:29

您可以按照条件的值添加一个列(每种传输方式):

代码语言:javascript
复制
df['hasDecreasedMarkedly'] = (df['Bus'] - df['Bus'].shift(1))/df['Bus'] >= 0.05
票数 0
EN

Stack Overflow用户

发布于 2022-02-28 17:57:04

你可以使用熊猫.pct_change()。

代码语言:javascript
复制
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

输出:

代码语言:javascript
复制
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%以上,如果是,打印出来,如果没有,继续扫描”您可以这样做。

代码语言:javascript
复制
(print(df.loc[df['5 pct change'] == True]))

上面印着这个:

代码语言:javascript
复制
   Year  Bus    pct_change        5 pct change
6  2010  4.8   -0.058824          True
7  2011  4.5   -0.062500          True
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71298975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档