【问题标题】:How do I find percentage difference from the first row and subsequent rows in pandas?如何找到熊猫中第一行和后续行的百分比差异?
【发布时间】:2021-03-29 22:09:44
【问题描述】:

所以我有一个具有某些值的数据框,我想找出随后时间段与 2020 年的百分比差异。

我的数据框是这样的:

Years          A              B          C           D          E
2020        801.566522  769.2986786 830.8725406 830.8725406 840.7192069
2021-2030   786.3122361 759.3832642 826.2453567 826.2453567 838.7446964
2031-2050   787.6490105 759.1486884 827.4489946 827.4489946 839.8352851
2041-2050   775.1016567 745.1193567 817.2389842 817.2389842 831.9880991

我需要计算 2020 年的值与随后十年之间的值之间的百分比差异,输出应如下所示。

Years           A                 B               C                D            E
2021-2030   -0.019030593    -0.012888901    -0.005569066    -0.005569066    -0.002348597
2031-2050   -0.01736289     -0.013193823    -0.004120423    -0.004120423    -0.001051388
2041-2050   -0.03301643     -0.031430344    -0.016408722    -0.016408722    -0.010385284

我可以很容易地在 excel 中执行此操作,但由于我有大量这些文件,因此我想在 python 中执行此操作。我试过使用 pct_change 函数,但它计算当前行和上一行之间的百分比差异,所以在它的基本形式中没有那么有用。谁能帮我解决这个问题?

【问题讨论】:

  • 好问题顺便说一句。 +1

标签: python python-3.x pandas dataframe


【解决方案1】:

df.squeezedf.iloc 一起使用:

In [877]: df.iloc[:, 1:] = (df.iloc[:, 1:] - df.iloc[0, 1:].values.squeeze()).div(df.iloc[:, 1:])

In [880]: df = df.loc[1:]

In [881]: df
Out[881]: 
       Years         A         B         C         D         E
1  2021-2030   -0.0194 -0.013057   -0.0056   -0.0056 -0.002354
2  2031-2050  -0.01767  -0.01337 -0.004137 -0.004137 -0.001052
3  2041-2050 -0.034144  -0.03245 -0.016682 -0.016682 -0.010494

【讨论】:

  • 我想我没有正确表达我的问题,因为您的解决方案也在计算当前行和上一行之间的百分比差异,例如对于 2031-2040 年,百分比差异是根据 2021-2030 年的值计算的。我想从 2020 年的值计算从 2021-2030 年开始的每一行的百分比差异,例如,对于 2031-2040 行,将根据 2020 年的值计算所有值的百分比差异。
  • @HamzaWaheed 请检查我的更新答案。
  • 谢谢你这工作完美。只是一个小问题,在第一行,不应该是 .... div(df.iloc[0, 1:]) 吗?因为这是给我确切值的那个,否则非常感谢你
猜你喜欢
  • 2021-01-05
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 2021-09-02
  • 2015-04-06
  • 1970-01-01
  • 2019-05-10
  • 2021-07-24
相关资源
最近更新 更多