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。
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
我有一个包含以下列的数据框:
|---------------------|
| 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。
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