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() 。我尝试过不同的方法,但我没有得到它。
另一个解决方案:
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)