为了账号安全,请及时绑定邮箱和手机立即绑定

根据另一列重置累计总和

根据另一列重置累计总和

胡子哥哥 2023-05-09 15:04:12
有许多与条件累积和相关的查询和答案(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


查看完整回答
反对 回复 2023-05-09
  • 1 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信