pandas:cumsum 忽略前两行

pandas: cumsum ignoring first two rows

我有一个包含以下列的数据框:

|---------------------| 
|          A          |
|---------------------|
|           0         |
|---------------------|
|         2.63        |
|---------------------|
|         7.10        |
|---------------------|
|         5.70        |
|---------------------|
|         6.96        |
|---------------------|
|         7.58        |
|---------------------|
|         3.3         |
|---------------------|
|         1.93        |
|---------------------|

我要求累计和,但是重点有点讲究。第一个元素应该是0,后面是从上一列开始的累计和,所以在这种情况下我需要产生:

|---------------------| 
|          B          |
|---------------------|
|           0         |
|---------------------|
|           0         |
|---------------------|
|         2.63        |
|---------------------|
|         9.73        |
|---------------------|
|        15.43        |
|---------------------|
|        22.39        |
|---------------------|
|        29.97        |
|---------------------|
|        33.27        |
|---------------------|

我知道在没有我要求的条件时很容易实现:

df['B'] = df.A.cumsum()

但是,我不知道如何解决这个问题,我想实现一个for循环,但我希望有一个简单的方法使用pandas。

您可以添加shift and fillna:

df = df.A.cumsum().shift().fillna(0)
print (df)
0     0.00
1     0.00
2     2.63
3     9.73
4    15.43
5    22.39
6    29.97
7    33.27
Name: A, dtype: float64

基于@jezrael 的回答:您可以忽略 fillna() 并执行:

df = pd.DataFrame({"A": [0, 2.63, 7.10, 5.70, 6.96, 7.58, 3.3, 1.93]})

df = df.A.cumsum().shift(fill_value=0)

print (df)

0     0.00
1     0.00
2     2.63
3     9.73
4    15.43
5    22.39
6    29.97
7    33.27
Name: A, dtype: float64