如何解决%数字记录中的增加值
我的数据集
name date record
A 2018-09-18 95
A 2018-10-11 104
A 2018-10-30 230
A 2018-11-23 124
B 2020-01-24 95
B 2020-02-11 167
B 2020-03-07 78
如您所见,按名称和日期有几条记录。
与以前的记录相比,我希望看到记录上升最多的记录。
输出我想要的内容
name record_before_date record_before record_increase_date record_increase increase_rate
A 2018-10-11 104 2018-10-30 230 121.25
B 2020-01-24 95 2020-02-11 167 75.79
我没有比较最低价和最高价,但是我想在下一条记录到达时检查上升率最高的记录以及上升率。
增加率公式=(record_increase-record_before)/ record_before * 100
任何帮助将不胜感激。 感谢您的阅读。
解决方法
使用:
#get percento change per groups
s = df.groupby("name")["record"].pct_change()
#get row with maximal percent change
df1 = df.loc[s.groupby(df['name']).idxmax()].add_suffix('_increase')
#get row with previous maximal percent change
df2 = (df.loc[s.groupby(df['name'])
.apply(lambda x: x.shift(-1).idxmax())].add_suffix('_before'))
#join together
df = pd.concat([df2.set_index('name_before'),df1.set_index('name_increase')],axis=1).rename_axis('name').reset_index()
#apply formula
df['increase_rate'] = (df['record_increase'].sub(df['record_before'])
.div(df['record_before'])
.mul(100))
print (df)
name date_before record_before date_increase record_increase \
0 A 2018-10-11 104 2018-10-30 230
1 B 2020-01-24 95 2020-02-11 167
increase_rate
0 121.153846
1 75.789474
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。