有许多与条件累积和相关的查询和答案(Cumsum Reset based on a condition in Pandas,Reset Cumulative sum based on condition Pandas,Cumsum Reset based on a condition in Pandas)。但我无法解决我面临的问题。以下是我拥有的部分数据,要求是记录“类型”的变化和相应的累计总和。 type sale y 10 y 20 y 5 n 30 n 20 n 5 y 10 y 40 y 15 我的要求是获得类型变化和累计销售额的连续计数,如下所示。 type sale tp_cum cum_sale y 10 1 10 y 20 1 30 y 5 1 35 n 30 2 30 n 20 2 50 n 5 2 55 y 10 3 10 y 40 3 50 y 15 3 65我尝试对下面的代码进行各种修改,但并不完全符合要求。请帮忙。sales['cum_sale'] = stock.groupby('type')['sale'].cumsum()数据框:df = pd.DataFrame([["y",10 ], ["y",20 ],["y",5 ],["n",30 ],["n",20 ],["n",5 ],["y",10 ], ["y",40 ],["y",15 ]],columns = ["type","sale"])
1 回答
SMILET
TA贡献1796条经验 获得超4个赞
这是一个选项,您首先创建tp_cum列,然后cumsum()
import pandas as pd
import numpy as np
df = pd.DataFrame([["y",10 ],
["y",20 ],
["y",5 ],
["n",30 ],
["n",20 ],
["n",5 ],
["y",10 ],
["y",40 ],
["y",15 ]],columns = ["type","sale"])
df["type2"] = np.cumsum((df["type"] != df["type"].shift(1)))
df["cum_sale"] = df[["sale","type2"]].groupby("type2").cumsum()
df
输出:
type sale type2 cum_sale
0 y 10 1 10
1 y 20 1 30
2 y 5 1 35
3 n 30 2 30
4 n 20 2 50
5 n 5 2 55
6 y 10 3 10
7 y 40 3 50
8 y 15 3 65
添加回答
举报
0/150
提交
取消