【发布时间】:2021-07-27 00:36:57
【问题描述】:
我需要帮助来计算在条件发生变化时重置的累积总和。我使用了一个循环,但数据集太重了。也尝试使用这两个链接,但我无法获得我想要的输出。我无法从数据框中删除重复项,因为我需要示例表中未显示的信息。
Cumulative sum that resets based on the year
我有 License Plate 和 Transp Doc 列,需要一个名为 Deliveries 的新列,条件是:如果它是相同的车牌和相同的 Transp Doc,则视为 1 次交付,但如果是不同的 Transp Doc 加 1,如果不是相同的 License Plate 则重置累计和。
我基于此方法的 excel 公式(在单元格 C3 上设置)将是 =IF(A2=A3;IF(B2=B3;C2+0;C2+1);1)
| A | B | C | |
|---|---|---|---|
| 1 | License Plate | Transp Doc | Deliveries |
| 2 | AAA1111 | 65184 | 1 |
| 3 | AAA1111 | 65186 | 2 |
| 4 | AAA1111 | 65188 | 3 |
| 5 | BBB2222 | 65195 | 1 |
| 6 | BBB2222 | 65195 | 1 |
| 7 | BBB2222 | 65201 | 2 |
| 8 | CCC3333 | 65207 | 1 |
| 9 | CCC3333 | 65207 | 1 |
| 10 | DDD4444 | 65212 | 1 |
import pandas as pd
DF = pd.DataFrame({'License Plate': ["AAA1111","AAA1111","AAA1111","BBB2222","BBB2222","BBB2222","CCC3333","CCC3333","DDD4444"],
'Transp Doc': [65184,65186,65188,65195,65195,65201,65207,65207,65212],
'Deliveries': [1,2,3,1,1,2,1,1,1],
})
我得到的最远的是使用这条线:
DF['Deliveries'] = DF['License Plate'].eq(DF['License Plate'].shift()).cumsum()
只求上一行是否相等,不考虑Transp Doc是否相同,换版时不重置。
【问题讨论】:
标签: python cumulative-sum