使用 groupby 和 cumsum 在 pandas 中获取新列

Doy*_*ima 4 python pandas cumsum

我有以下数据框:

班级 已收到 发布
FD 10 0
FD 0 2
R M 5 0
R M 0 3
FD 0 2
下午 5 0
下午 1 0
R M 1 0
FD 4 0

我需要下面的数据框:

班级 已收到 发布 剩余数量
FD 10 0 10
FD 0 2 8
R M 5 0 5
R M 0 3 2
FD 0 2 6
下午 5 0 5
下午 1 0 6
R M 1 0 3
FD 4 0 10

剩余数量列是每个班级收到的-发出的 cumsum() 。我尝试过不同的方法,但我没有得到它。

And*_*ely 6

另一个解决方案:

df["Remaining Quatity"] = (g := df.groupby("Class").cumsum())["Received"] - g["Issued"]
print(df)
Run Code Online (Sandbox Code Playgroud)

印刷:

  Class  Received  Issued  Remaining Quatity
0    FD        10       0                 10
1    FD         0       2                  8
2    RM         5       0                  5
3    RM         0       3                  2
4    FD         0       2                  6
5    PM         5       0                  5
6    PM         1       0                  6
7    RM         1       0                  3
8    FD         4       0                 10
Run Code Online (Sandbox Code Playgroud)

或:使用.pipe

df["Remaining Quatity"] = df.groupby("Class").cumsum().pipe(lambda g: g["Received"] - g["Issued"])
Run Code Online (Sandbox Code Playgroud)

或:使用.eval

df["Remaining Quatity"] = df.groupby("Class").cumsum().eval("Received - Issued")
Run Code Online (Sandbox Code Playgroud)