python - 熊猫百分比差异计算
问题描述
我有以下 Pandas 数据框。第一列是 YYYY-MM-DD 格式的日期。它有逐月数据,但月份开始可能不一定是第 1 个月,最后一个月可能不一定是 31 或 30,也不一定是 29 或 28,以防 2 月。它可能会有所不同。例如,2020 年 2 月只有 2020 年 2 月 3 日的数据,而 2 月的最后可用数据是 2020 年 2 月 28 日(不是 29 日)。
Date start_Value end_value
2020-01-01 115 120
2020-01-02 122 125
2020-01-03 125.2 126
...
2020-01-31 132 135
2020-02-03 135.5 137
2020-02-04 137.8 138
...
2020-02-28 144 145
我的目标是创建一个新列,用于计算数据框中上个月最后一个可用日期的结束值与数据帧中下个月最后一个可用日期的结束值之间的百分比差异。除该月的最后一个可用日期外,所有日期都应为 0。对于 2020 年 1 月,由于我们没有上个月的数据,因此应使用该月第一个可用日期的结束值来计算百分比差异。
对于 2020 年 1 月,将计算 2020 年 1 月 1 日的终值与 2020 年 1 月 31 日的终值之间的百分比差异。对于其余部分(例如从 2020 年 2 月开始:百分比差异是在 2020 年 1 月 31 日的最终值和 2020 年 2 月 28 日的最终值之间计算的)。
Date start_Value end_value percentage difference
2020-01-01 115 120 0
2020-01-02 122 125 0
2020-01-03 125.2 126 0
...
2020-01-31 132 135 17.4
2020-02-03 135.5 137 0
2020-02-04 137.8 138 0
...
2020-02-28 144 145 7.41
如何在 python 和 pandas 中实现这一点?
解决方案
检查transform
与duplicated
s = df.Date.dt.strftime('%Y-%m')
df['pct']= (df.groupby(s)['end_value'].transform('last')/df.groupby(s)['start_Value'].transform('first')-1).\
mask(s.duplicated(keep='last'))
推荐阅读
- javascript - 节点红色多上下文
- swift - Swift 4中任何类型的带有错误协议的向下转换枚举
- visual-studio - DOCKER_REGISTRY 变量未设置。默认为空字符串
- angular - Angular 2-如何将一个子组件作为另一个子组件的叠加层放置在父组件中
- publish-subscribe - 使用 grpc 和 node js 通过 HTTP 2 访问 Google Cloud Pubsub
- c++ - MacOS 上 cmake + 共享库的问题
- android - 抓取时获得空 src
- reactjs - 如何取出传递给 Hoc 函数的道具
- r - GGraph 和格式化节点
- c++ - Compiling Qt projects in Qt/MsBuild format without Qt VS Tools installed