我有一个基于客户服务 case 结束前所在位置的Pandas 数据框架.每次编辑 case 并捕获审计审判时.我想为每一次 case 部门从之前所在的部门发生变化时生成一个计数器.

ID Department Start Date End Date
A Sales 01/01/2022 02/01/2022
A Sales 02/01/2022 03/01/2022
A Operations 03/01/2022 04/01/2022
A Sales 04/01/2022 05/01/2022
B Finance 01/01/2022 02/01/2022
B Risk 02/01/2022 03/01/2022

我想要实现的输出如下所示,我正在努力解决的部分是当票据返回到它已经所在的部门时,使"部门更改计数"值增加.

ID Department Start Date End Date Count of Department Change
A Sales 01/01/2022 02/01/2022 0
A Sales 02/01/2022 03/01/2022 0
A Operations 03/01/2022 04/01/2022 1
A Sales 04/01/2022 05/01/2022 2
B Finance 01/01/2022 02/01/2022 0
B Risk 02/01/2022 03/01/2022 1

使用以下代码,我能够在部门针对给定 case 进行更改时进行标记.

df['Dept_Change_Count'] = np.where((df['Department'] != df['Department'].shift(1)) & (df['ID'] == df['ID'].shift(1)), '1', '0')

我想我可以使用df[Dept\u Change\u Count]和沿着ID的一个连续总和来生成我想要的输出,但到目前为止我运气不太好.

非常感谢您的帮助!

推荐答案

比较Department/ID中的前一行和当前行,然后再次比较group/ID,并计算cumsum以生成计数器

m = df['Department'] != df.groupby('ID')['Department'].shift()
df['Dept_Change_Count'] = m.groupby(df['ID']).cumsum() - 1

使用单个groupby和lambda func计算总和的替代方法:

df['Dept_Change_Count'] = df.groupby('ID')['Department']\
                            .apply(lambda s: (s != s.shift()).cumsum()) - 1

  ID  Department  Start Date    End Date  Dept_Change_Count
0  A       Sales  01/01/2022  02/01/2022                  0
1  A       Sales  02/01/2022  03/01/2022                  0
2  A  Operations  03/01/2022  04/01/2022                  1
3  A       Sales  04/01/2022  05/01/2022                  2
4  B     Finance  01/01/2022  02/01/2022                  0
5  B        Risk  02/01/2022  03/01/2022                  1

Python相关问答推荐

删除任何仅包含字符(或不包含其他数字值的邮政编码)的观察

运行总计基于多列pandas的分组和总和

大小为M的第N位_计数(或人口计数)的公式

在Mac上安装ipython

无法定位元素错误404

如果条件不满足,我如何获得掩码的第一个索引并获得None?

把一个pandas文件夹从juyter笔记本放到堆栈溢出问题中的最快方法?

如何在Python中获取`Genericums`超级类型?

Django admin Csrf令牌未设置

如何更改groupby作用域以找到满足掩码条件的第一个值?

在Python中计算连续天数

matplotlib + python foor loop

手动设置seborn/matplotlib散点图连续变量图例中显示的值

具有相同图例 colored颜色 和标签的堆叠子图

如何在海上配对图中使某些标记周围的黑色边框

不允许 Select 北极滚动?

无法在Spyder上的Pandas中将本地CSV转换为数据帧

如何将返回引用的函数与pybind11绑定?

如何使用pytest在traceback中找到特定的异常

在任何要保留的字段中添加引号的文件,就像在Pandas 中一样