我需要帮助做一个累计总和,当条件改变时重置。我使用了循环,但数据集太重。我也尝试过使用这两个链接,但我无法得到我想要的输出。我无法从数据帧中删除重复项,因为我需要示例表中未显示的信息
Cumulative sum that resets based on the year
我有License Plate
和Transp Doc
列,需要一个名为Deliveries
的新列,条件是:如果是相同的车牌和相同的运输单据,则视为1次交付,但是如果不是相同的运输单据,则添加1次,如果不是相同的车牌,则重置累计和。
这个方法所基于的excel公式(设置在单元格C3上)是=IF(A2=A3;IF(B2=B3;C2+0;C2+1);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是否相同,并且在换版时不会重置
查找重复的行(基于车牌和transp doc),这将产生一个布尔序列。反转序列,您可以将布尔值相加为整数0和1(但现在还不能)
然后根据车牌分组,在更换车牌时拆分此系列。最后,对这些组使用累积和(将布尔值添加为整数),并将结果分配给数据帧中的新列
相关问题 更多 >
编程相关推荐