Python 计算数据帧中与基线值相比的百分比变化

Python 计算数据帧中与基线值相比的百分比变化,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个熊猫数据帧,我想计算与开始值相比的百分比差异。有没有办法使用pct_更改来完成此任务 e、 g 我的数据 date close 2020-05-08 100 2020-05-11 102 2020-05-12 108 我希望变化看起来像 date close change (%) 2020-05-08 100 0 2020-05-11 102 2 2020-05-12 108 8 是的,

我有一个熊猫数据帧,我想计算与开始值相比的百分比差异。有没有办法使用pct_更改来完成此任务

e、 g

我的数据

 date         close
2020-05-08    100
2020-05-11    102
2020-05-12    108
我希望变化看起来像

 date         close  change (%)
2020-05-08    100     0
2020-05-11    102     2
2020-05-12    108     8

是的,这可以使用pct_更改来完成

如果不关心方向+/-,则也可以取绝对值:

df['change'] = (df['close'].pct_change().fillna(0).add(1).cumprod().sub(1).abs())*100

是的,这可以使用pct_更改来完成

如果不关心方向+/-,则也可以取绝对值:

df['change'] = (df['close'].pct_change().fillna(0).add(1).cumprod().sub(1).abs())*100

编辑:正如大卫所建议的,有比这更好的解决方案。我会留下答案,让你们知道什么是不该做的

您始终可以使用额外的列来提供帮助。这相当容易:

start_value = 100 #or access through the index

df['beginning'] = start_value
df['change (%)'] = 100 * (df.close/df.beginning - 1)
df
输出:

    date    close   beginning   change (%)
0   2020-05-08  100     100     0.0
1   2020-05-11  102     100     2.0
2   2020-05-12  108     100     8.0
         date  close  change
0  2020-05-08    100     0.0
1  2020-05-11    102     2.0
2  2020-05-12    108     8.0

编辑:正如大卫所建议的,有比这更好的解决方案。我会留下答案,让你们知道什么是不该做的

您始终可以使用额外的列来提供帮助。这相当容易:

start_value = 100 #or access through the index

df['beginning'] = start_value
df['change (%)'] = 100 * (df.close/df.beginning - 1)
df
输出:

    date    close   beginning   change (%)
0   2020-05-08  100     100     0.0
1   2020-05-11  102     100     2.0
2   2020-05-12  108     100     8.0
         date  close  change
0  2020-05-08    100     0.0
1  2020-05-11    102     2.0
2  2020-05-12    108     8.0
你能行

df['change'] = df['close'].div(df['close'].iloc[0]).sub(1).mul(100)

输出:

    date    close   beginning   change (%)
0   2020-05-08  100     100     0.0
1   2020-05-11  102     100     2.0
2   2020-05-12  108     100     8.0
         date  close  change
0  2020-05-08    100     0.0
1  2020-05-11    102     2.0
2  2020-05-12    108     8.0
你能行

df['change'] = df['close'].div(df['close'].iloc[0]).sub(1).mul(100)

输出:

    date    close   beginning   change (%)
0   2020-05-08  100     100     0.0
1   2020-05-11  102     100     2.0
2   2020-05-12  108     100     8.0
         date  close  change
0  2020-05-08    100     0.0
1  2020-05-11    102     2.0
2  2020-05-12    108     8.0

可爱的解决方案!可爱的解决方案!第二个看起来是一个更好、更简洁的解决方案+1.第二个正是我要找的,谢谢你的帮助!第二个看起来是一个更好、更简洁的解决方案+1.第二个正是我要找的,谢谢你的帮助!实际上,我认为使用一个额外的列会使它更清晰,尤其是当你开始遇到更复杂的问题时,例如,将多行与单个基线进行比较,同时仍然控制许多其他列。我认为,使用一个额外的列会使它更清晰,尤其是当您开始遇到更复杂的问题时,例如,将多行与单个基线进行比较,同时仍控制许多其他列