python - 转置堆叠后扣除连续的pandas列
问题描述
我有一个这样的数据框:
FORECAST_DATE Y0 Y1 Y2 Y3
BOOK_SEGMENT_ID
BALANCE_DRAWN 1 7744692.050 6195753.640 6195753.640 6195753.640
2 2941409070.940 2016387035.960 2016387035.960 2016387035.960
3 426236553.350 294727915.360 294727915.360 294727915.360
4 97310100.530 66594434.600 66594434.600 66594434.600
6 3789332.090 2317117.520 2317117.520 2317117.520
由。。。生产:
result.T.stack()
我想做以下扣除:Y0 - Y-1(将是 NaN)
Y1 列值 = Y1 - Y0
Y2 列值 = Y2 - Y1
Y3 列值 = Y3 - Y2
使用 result.diff(axis=1) 我得到:
FORECAST_DATE Y0 Y1 Y2 Y3
BOOK_SEGMENT_ID
BALANCE_DRAWN 1 nan -1548938.410 0.000 0.000
2 nan -925022034.980 0.000 0.000
3 nan -131508637.990 0.000 0.000
4 nan -30715665.930 0.000 0.000
6 nan -1472214.570 0.000 0.000
Y1 - Y0 工作并被放入 Y1 列,但对于其他列它不起作用。
关于如何做到这一点的任何建议?
解决方案
我找到了一个方法:
#substracting the columns besides the first one because it errors that there is no column Y-1
for i in range(1, len(formatted.columns)):
formatted["Y" + str(i)] = formatted["Y" + str(i)] - formatted["Y" + str(i-1)]
#set Y0 to NaN
formatted["Y0"] = "NaN"
Result:
FORECAST_DATE Y0 Y1 Y2 Y3
BOOK_SEGMENT_ID
BALANCE_DRAWN 1 NaN -1548938.410 7744692.050 -1548938.410
2 NaN -925022034.980 2941409070.940 -925022034.980
3 NaN -131508637.990 426236553.350 -131508637.990
4 NaN -30715665.930 97310100.530 -30715665.930
6 NaN -1472214.570 3789332.090 -1472214.570
如果有人有比这更好看的解决方案。我会欣然接受。
推荐阅读
- java - 如何使用 fat-JAR 正确运行 Akka 应用程序?(未找到密钥“akka.remote.log-received-messages”的配置设置)
- ios - 如何在 Swift 中按顺序对一组图像视图进行动画处理?
- c# - 如何在 xaml 中创建可扩展(下拉)表?
- python - 即使从 ckpt 文件恢复后,Tensorflow 权重也没有恢复
- sqlite - 我可以观察基于变量查询的 LiveData 对象吗?
- php - 在codeigniter中通过ajax post提交表单数据时如何停止重定向到控制器页面
- python - 如何在 Django auth_views 中使用我自己的模板?
- javascript - 在laravel中将日期函数传递给javascript
- javascript - DarkSky 代理 - “请求未发送。错误:缺少经度或纬度。” - 节点 JS 请求 URL,不知道为什么不工作
- matlab - 未定义的函数或变量“x”