如何在Pandas中为DataFrame添加计算余额值的新列
给Pandas DataFrame添加累计余额列的解决方案
嘿,我来帮你搞定这个需求!咱们先明确一下目标:现有一个包含first和second列的DataFrame,需要新增third列记录累计余额,规则是初始余额为0,每一行的余额 = 上一行余额 - 当前行first值 + 当前行second值。
先看一下初始的DataFrame代码和内容:
import pandas as pd data={'first':[5,4,3,2,3], 'second':[1,2,3,4,5]} df = pd.DataFrame(data)
对应的表格:
| first | second |
|---|---|
| 5 | 1 |
| 4 | 2 |
| 3 | 3 |
| 2 | 4 |
| 3 | 5 |
高效实现方法
别用循环逐行算(大数据量下循环慢到离谱),咱们用Pandas的向量化操作+cumsum()函数就能快速搞定:
# 先计算每行的余额变动值:-first + second,再对变动值做累计求和得到余额 df['third'] = (-df['first'] + df['second']).cumsum()
运行完这段代码,你的DataFrame就会变成期望的样子:
| first | second | third |
|---|---|---|
| 5 | 1 | -4 |
| 4 | 2 | -6 |
| 3 | 3 | -6 |
| 2 | 4 | -4 |
| 3 | 5 | -2 |
原理说明
这个方法的逻辑其实很直观:
- 每一行对余额的影响是
-first + second,也就是余额的变动量 cumsum()会从第一行开始把这些变动量依次累加,初始累加值为0,正好对应我们的初始余额- 比如第一行累加结果是
-5+1=-4,就是初始0加上这个变动量;第二行是-4 + (-4+2) = -6,也就是上一行余额加上当前变动量,完全符合需求
这种向量化操作比循环高效太多,尤其是当你的DataFrame有几万甚至几十万行的时候,优势会非常明显。
内容的提问来源于stack exchange,提问作者Bashar
相关产品推荐
相关产品推荐

