pandas 判断某列状态变化

厚着脸皮,再写一篇~~~

需求描述:

如下列数据,第一列是id,第二列标识的是状态,但状态变化时,我需要统计出来保持该状态的其他列的一些数据如开始、结束时间,sum等等。虽然只有1020和1021两种状态,但是从1020变化到1021,这是一次变化,从1021变到1020这是第二次变化,所以要标识3种状态。假如直接按照这一列进行groupby,那么其他列的统计信息比如sum、mean等就会有问题,因为它把首尾两部分的“1020”会groupby到一起。总之,我要的效果是通过某种方式可以将 id=0到26的数据groupby到一起,id=27到某一行(状态是1021的数据)groupby到一起,之后的数据再独自groupby到一起。

0     1020
1     1020
2     1020
3     1020
4     1020
5     1020
6     1020
7     1020
8     1020
9     1020
10    1020
11    1020
12    1020
13    1020
14    1020
15    1020
16    1020
17    1020
18    1020
19    1020
20    1020
21    1020
22    1020
23    1020
24    1020
25    1020
26    1020
27    1021
28    1021
29    1021
      ... 
66    1020
67    1020
68    1020
69    1020
70    1020
71    1020
72    1020
73    1020
74    1020
75    1020
76    1020
77    1020
78    1020
79    1020
80    1020
81    1020
82    1020
83    1020
84    1020
85    1020
86    1020
87    1020
88    1020
89    1020
90    1020
91    1020
92    1020
93    1020
94    1020
95    1020
Name: status_summary, Length: 96, dtype: int64

学艺不精,在网上找到了一种优雅的方式:

testdf["status_summary"].diff().ne(0).cumsum()

diff()是计算相邻两条数据的差,ne(0)判断是否为0,不等于0则输出“True“,否则是”False“,cumsum()是累加,结果如下

0     1
1     1
2     1
3     1
4     1
5     1
6     1
7     1
8     1
9     1
10    1
11    1
12    1
13    1
14    1
15    1
16    1
17    1
18    1
19    1
20    1
21    1
22    1
23    1
24    1
25    1
26    1
27    2
28    2
29    2
     ..
66    3
67    3
68    3
69    3
70    3
71    3
72    3
73    3
74    3
75    3
76    3
77    3
78    3
79    3
80    3
81    3
82    3
83    3
84    3
85    3
86    3
87    3
88    3
89    3
90    3
91    3
92    3
93    3
94    3
95    3
Name: status_summary, Length: 96, dtype: int32

这样就生成了一个新列,标识出状态变化后的数据,然后根据这一列来grouby,问题搞定。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值