自定义累积熊猫总和

时间:2020-01-09 13:08:15

标签: python pandas

Noob问题,很抱歉。

我正在尝试对已导入的表进行累加。但是,我希望它在继续之前在专栏中的中点有所不同。有没有办法让cumsum()计算到一行然后再从另一点继续

df['Cumlative Sum'] = df['Value'].cumsum()

|    | Value | Cumlative Sum | Expected Cumlative Sum |
|----|-------|---------------|------------------------|
| 0  | 329.6 | 329.6         | 329.6                  |
| 1  | 34.0  | 363.6         | 363.6                  |
| 2  | 10    | 373.6         | 373.6                  |
| 3  | 8     | 381.6         | 381.6                  |
| 4  | 3     | 384.6         | 384.6                  |
| 5  | -2    | 382.6         | 382.6                  |
| 6  | -4    | 378.6         | 378.6                  |
| 7  | -34   | 344.6         | 344.6                  |
| 8  | -1    | 343.6         | 343.6                  |
| 9  | 343.6 | 687.2         | 343.6                  |
| 10 | 0     | 687.2         | 343.6                  |
| 11 | -33   | 654.2         | 310.6                  |
| 12 | -3    | 651.2         | 307.6                  |
| 13 | 0     | 651.2         | 307.6                  |
| 14 | 1     | 652.2         | 308.6                  |
| 15 | 4     | 656.2         | 312.6                  |
| 16 | 0     | 656.2         | 312.6                  |
| 17 | 21    | 677.2         | 333.6                  |
| 18 | 333.6 | 1010.8        | 333.6                  |

2 个答案:

答案 0 :(得分:0)

您可以从这样的东西开始。

import pandas as pd
import numpy as np

df = pd.DataFrame(data=np.random.randint(0,100,size=(20,2)),columns=['A','B'])

def Offset_CumSum(Column, Percentage_Offset=0.5):
    return np.cumsum(Column[int(len(Column)*Percentage_Offset):])

Cumsum_DF = df.apply(lambda x: Offset_CumSum(x), axis=0)
print(df)
print(Cumsum_DF)

这将产生以下输出。

     A   B
0   29  11
1    9  51
2   99  31
3   30  44
4   76  13
5   32  48
6   85  83
7    9  98
8   49  34
9   25   0
10  39  22
11  25  96
12  69   7
13  28   6
14   4  92
15  90  32
16  68  72
17  63  25
18  85  47
19  61  31
      A    B
10   39   22
11   64  118
12  133  125
13  161  131
14  165  223
15  255  255
16  323  327
17  386  352
18  471  399
19  532  430

============================================ =======================

在看到修改后添加问题数据集特定的代码。

import pandas as pd
import numpy as np

df = pd.DataFrame(data=np.random.randint(0,100,size=(20,2)),columns=['A','B'])
def Offset_CumSum(Column, Percentage_Offset=0.5):
    return np.cumsum(Column[: int(len(Column)*Percentage_Offset)]).tolist() + np.cumsum(Column[int(len(Column)*Percentage_Offset):]).tolist()

Cumsum_DF = df.apply(lambda x: Offset_CumSum(x), axis=0)
print(df)
print(Cumsum_DF)

这应该有效。

答案 1 :(得分:0)

df['Group Flag'] = ""
df.loc[0:8, 'Group Flag'] = 0
df.loc[9:17, 'Group Flag'] = 1
df['Cumlative Sum'] = df.groupby('Group Flag')['Value'].cumsum()
df.drop('Group Flag', axis=1)
df[['Title','Value','Cumlative Sum']]