Python 计算数据帧中与基线值相比的百分比变化
我有一个熊猫数据帧,我想计算与开始值相比的百分比差异。有没有办法使用pct_更改来完成此任务 e、 g 我的数据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 是的,
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.第二个正是我要找的,谢谢你的帮助!实际上,我认为使用一个额外的列会使它更清晰,尤其是当你开始遇到更复杂的问题时,例如,将多行与单个基线进行比较,同时仍然控制许多其他列。我认为,使用一个额外的列会使它更清晰,尤其是当您开始遇到更复杂的问题时,例如,将多行与单个基线进行比较,同时仍控制许多其他列