又来求教 pandas 大拿了
如下一个表,想每当 C 列为 False 时候,D 列为 0,为 True 时候,D 列为 B 列的上一次 C 列为 False 到当前列的加总
df = pd.DataFrame([['S1', 1, False], ['S1', 1, True], ['S2', 2, False], ['S2', 2, True], ['S2', 22, False], ['S2', 22, True], ['S3', 222, False], ['S3', 222, True]], columns=list('ABC')) print(df) A B C 0 S1 1 False 1 S1 1 True 2 S2 2 False 3 S2 2 True 4 S2 22 False 5 S2 22 True 6 S3 222 False 7 S3 222 True
用 for 循环切片每次的 False 到 True 再处理可以得到想要的结果,但是总觉得效率不高。
用了下面的方法,得出来的结果不对,5 行 D 列应该是 44(22+22)而不是 48(2+2+22+22)
df['D'] = np.where(df.C, df.groupby('A')['B'].cumsum(), 0) print(df) A B C D 0 S1 1 False 0 1 S1 1 True 2 2 S2 2 False 0 3 S2 2 True 4 4 S2 22 False 0 5 S2 22 True 48 6 S3 222 False 0 7 S3 222 True 444