python - 在 Pandas 中根据 TimeDelta 进行标记
问题描述
我有一个具有以下结构的熊猫数据框:
时间 | 参数_1 | 时间增量 |
---|---|---|
1 | 1 | - |
2 | 1 | 1 |
4 | 1 | 2 |
5 | 1 | 1 |
7 | 1 | 2 |
8 | 1 | 1 |
14 | 1 | 6 |
15 | 1 | 1 |
17 | 1 | 2 |
现在我想根据时间标记。标签从 1 开始。如果时间增量仅为 1,则标签不应增加。如果 timedelta 大于 1 但小于 6,则标签应从 1 开始,然后计数到 3。如果距离为 6 或更大,则在 1 处再次进行标记。这里也是,标签再次达到3.等等。是否有可能没有循环或者我怎样才能最好地做到这一点?如果您看到如下表格,也许会更容易理解:
时间 | 参数_1 | 时间增量 | 标签 |
---|---|---|---|
1 | 42 | - | 1 |
2 | 1 | 1 | 1 |
4 | 1 | 2 | 2 |
5 | 1 | 1 | 2 |
7 | 1 | 2 | 3 |
8 | 1 | 1 | 3 |
14 | 1 | 6 | 1 |
15 | 1 | 1 | 1 |
17 | 1 | 2 | 2 |
我已经问过一个类似的问题,请参阅:一旦值大于 xy,标记所有后续行 但是,这里没有重复标记,或者如果距离大于 xy,它不会从 1 重新开始。有任何想法吗?谢谢。
Edit2:当我使用 Quang Hoang 的代码时,标签如下所示:
import pandas as pd
data = [[1, 1, 0],
[2, 1, 1],
[4, 1, 2],
[5, 1, 1],
[7, 1, 2],
[8, 1, 1],
[14, 1, 6],
[15, 1, 1],
[17, 1, 2],
]
df = pd.DataFrame(data, columns = ['time', 'parameter_1', 'TimeDelta'])
blocks = df['TimeDelta'].ge(6).cumsum()
labels = df['TimeDelta'].gt(1.5)
df['label'] = labels.groupby(blocks).cumsum()
df
解决方案
该方法应该非常相似:您首先识别标签块,然后识别块内的标签:
blocks = df['TimeDelta'].ge(6).cumsum()
labels = df['TimeDelta'].gt(1)
df['label'] = labels.groupby(blocks).cumsum()
推荐阅读
- npm - socket.io 设置没有同站点属性的跨站点 cookie
- nuget - 使用私有存储库时在 Rider 中缓慢恢复/更新/安装
- c# - 表达式中的错误 ODBC 文本驱动程序未定义函数“PATINDEX”
- google-apps-script - Google Apps 脚本为什么它只搜索一个(第一个)附件
- c++ - 随机函数可以返回的范围是多少?
- sql - PostgreSQL 时间格式化
- asp.net-core - 使用内置身份服务器在 asp net core 3.0 中添加和访问声明
- c - 这个函数返回什么?
- azure - 触发 Azure 函数以调用 Web 作业
- postgresql - 数据库操作预计会影响 1 行,但实际上影响了实体框架的 0 行