python - 如何在包含 NA 的行中对 pandas 数据框进行分组并为组分配索引?
问题描述
我想如果下面的例子应该解释我的问题。结果应如下所示:
| datetime value block_nr |
+----------------------------------+
| …15:00 22.5 1 |
| …15:05 22.0 1 |
| …15:10 22.5 1 |
| …15:15 NA 0 |
| …15:20 NA 0 |
| …15:25 23.0 2 |
| …15:30 21.0 2 |
| …15:35 21.5 2 |
| …15:40 NA 0 |
| …15:45 NA 0 |
| …15:50 NA 0 |
| …15:55 21.4 3 |
+----------------------------------+```
解决方案
numpy.where
与测试非缺失值一起使用和Series.notna
重复值用于与与s
和链接的移位值进行比较Series.cumsum
:
s = df['value'].notna()
df['new'] = np.where(s, (s.ne(s.shift()) & s).cumsum(), 0)
print (df)
datetime value block_nr new
0 15:00 22.5 1 1
1 15:05 22.0 1 1
2 15:10 22.5 1 1
3 15:15 NaN 0 0
4 15:20 NaN 0 0
5 15:25 23.0 2 2
6 15:30 21.0 2 2
7 15:35 21.5 2 2
8 15:40 NaN 0 0
9 15:45 NaN 0 0
10 15:50 NaN 0 0
11 15:55 21.4 3 3
推荐阅读
- mysql - 使用 student_id 显示学生出勤情况的单个查询
- c++ - 当一个人无权访问整个矩阵时,如何为矩阵分解编写乘法更新规则?
- node.js - 使用“httpntlm”在 React-Native 中进行 NTLM 身份验证
- amazon-web-services - 退出 0 后 jenkins 的工作需要很长时间才能进入下一步
- google-cloud-platform - Terraform:将文件复制到 GCP 计算实例
- java - @Autowire JpaRepository 接口类错误限定 bean
- groovy - 如何更改 Apache Camel Route 中的属性值?
- c - 如何在共享内存中写入变量或读取它们?
- sql - 比较不同记录之间的两个日期
- python - 哪种方式是在 python 中获取部分字符串的最佳方式?