根据另一列重置累计总和

有许多与条件累积和相关的查询和答案(Cumsum Reset based on a condition in PandasReset Cumulative sum based on condition PandasCumsum 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"])


胡子哥哥
浏览 105回答 1
1回答

SMILET

这是一个选项,您首先创建tp_cum列,然后cumsum()import pandas as pdimport numpy as npdf = 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_sale0   y       10      1      101   y       20      1      302   y       5       1      353   n       30      2      304   n       20      2      505   n       5       2      556   y       10      3      107   y       40      3      508   y       15      3      65
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python