根据另一列重置累计总和
reset cumulative sum based on another column
关于条件累加和(, Reset Cumulative sum base on condition Pandas, )的问答很多。但我无法解决我面临的问题。以下是我拥有的部分数据,要求是保持 'type' 和相应累积总和的变化计数。
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"])
这是一个选项,您首先创建 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
关于条件累加和(
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"])
这是一个选项,您首先创建 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