如下一个表,想每当 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
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.