首页 > 解决方案 > 转置堆叠后扣除连续的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 列,但对于其他列它不起作用。

关于如何做到这一点的任何建议?

标签: pythonpython-3.xpandas

解决方案


我找到了一个方法:

#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

如果有人有比这更好看的解决方案。我会欣然接受。


推荐阅读