I have this DataFrame:

Names Account_1 Account_2 ID_Movement Less_1 Less_2
Peter 35 70 Movement_1 0 5
Peter 35 70 Movement_2 6 0
Peter 35 70 Movement_3 1 0
Peter 35 70 Movement_4 0 2
Jhon 55 60 Movement_5 6 0
Jhon 55 60 Movement_6 0 2
Jhon 55 60 Movement_7 0 3
Jhon 55 60 Movement_8 12 0
Jhon 55 60 Movement_9 6 0
William 34 88 Movement_10 0 8
William 34 88 Movement_11 0 9
William 34 88 Movement_12 0 5

I was trying to create a new column with the current value of the account of each person with this code:

s = (df['Account_1']).sub(df['Less_1']).groupby(df['Names']).cumsum() df2['New_Account1'] = s

Desired Output:

Names Account 1 Account 2 ID_Movement Less_1 Less_2 New_Account1 New_Account2
Peter 35 70 Movement_1 0 11 35 59
Peter 35 70 Movement_2 6 0 29 59
Peter 35 70 Movement_3 6 0 23 59
Peter 35 70 Movement_4 0 4 23 55
Jhon 55 60 Movement_5 6 0 49 60
Jhon 55 60 Movement_6 0 14 49 46
Jhon 55 60 Movement_7 0 13 49 33
Jhon 55 60 Movement_8 12 0 37 33
Jhon 55 60 Movement_9 6 0 31 33
William 34 88 Movement_10 12 0 22 88
William 34 88 Movement_11 0 9 22 79
William 34 88 Movement_12 0 5 22 74

推荐答案

Use groupby.cumsum and subtraction with to_numpy():

df[['New_Account1', 'New_Account2']] = (df[['Account_1', 'Account_2']]
                                        - df.groupby('Names')[['Less_1', 'Less_2']]
                                            .cumsum().to_numpy()
                                        )

Output:

      Names  Account_1  Account_2  ID_Movement  Less_1  Less_2  New_Account1  New_Account2
0     Peter         35         70   Movement_1       0       5            35            65
1     Peter         35         70   Movement_2       6       0            29            65
2     Peter         35         70   Movement_3       1       0            28            65
3     Peter         35         70   Movement_4       0       2            28            63
4      Jhon         55         60   Movement_5       6       0            49            60
5      Jhon         55         60   Movement_6       0       2            49            58
6      Jhon         55         60   Movement_7       0       3            49            55
7      Jhon         55         60   Movement_8      12       0            37            55
8      Jhon         55         60   Movement_9       6       0            31            55
9   William         34         88  Movement_10       0       8            34            80
10  William         34         88  Movement_11       0       9            34            71
11  William         34         88  Movement_12       0       5            34            66

Python相关问答推荐

@Property方法上的inspect.getmembers出现意外行为,引发异常

根据不同列的值在收件箱中移动数据

在Python Attrs包中,如何在field_Transformer函数中添加字段?

numpy卷积与有效

cv2.matchTemplate函数匹配失败

Python逻辑操作作为Pandas中的条件

Django admin Csrf令牌未设置

为什么numpy. vectorize调用vectorized函数的次数比vector中的元素要多?

python panda ExcelWriter切换动态公式到数组公式

在Admin中显示从ManyToMany通过模型的筛选结果

在Docker容器(Alpine)上运行的Python应用程序中读取. accdb数据库

在Google Drive中获取特定文件夹内的FolderID和文件夹名称

polars:有效的方法来应用函数过滤列的字符串

如何求相邻对序列中元素 Select 的最小代价

查看pandas字符列是否在字符串列中

有了Gekko,可以创建子模型或将模型合并在一起吗?

类型对象';敌人';没有属性';损害';

查找数据帧的给定列中是否存在特定值

Pandas:根据相邻行之间的差异过滤数据帧

IpyWidget Select 框未打开