问题描述
目标
我试图根据特定的开始/停止值发生来识别事件/周期的序列。目标是估算缺失的开始/停止值行并准确识别事件/周期的顺序。数据集包含多个 ID,序列必须将新 ID 视为新序列/循环。
我感兴趣的每个事件/周期序列只能是:
'开始' -> 活动('a'/'b'/'c'/etc)->'停止'
'start -> 'stop' 的出现可以忽略或不忽略,但立即无关紧要。
该数据集跟踪个人一个月的活动,样本集如下所示('cycles' 列是我所估算的,'intend_cycles' 列是我希望实现的):
样本数据集
id | 活动 | 周期 | 预期周期 | 备注 |
---|---|---|---|---|
1 | 开始 | 1 | ||
1 | 停止 | 1 | ||
1 | 处理 | 1 | ||
1 | 开始 | 2 | 1 | |
1 | 一 | 2 | 1 | |
1 | 开始 | 2 | 在前插入停止行 | |
1 | 停止 | 2 | ||
1 | 处理 | 2 | ||
1 | 开始 | 3 | 在后面插入停止行 | |
1 | 开始 | 3 | 2 | |
1 | b | 3 | 2 | |
1 | c | 3 | 2 | |
1 | 停止 | 3 | 2 | 插入起始行 |
1 | d | 3 | 3 | |
1 | e | 3 | 3 | |
2 | f | 3 | 4 | new id,时间线第一行,可以在周期中排除或作为新周期包含 |
2 | 开始 | 4 | 在后面插入停止行 | |
2 | 处理 | 4 | ||
2 | g | 4 | 5 | 在前面插入起始行 |
2 | h | 4 | 5 | |
2 | 我 | 4 | 5 | |
2 | 停止 | 4 | 5 | |
2 | 开始 | 5 | ||
2 | 停止 | 5 | ||
帮助
这个解决方案让我开始通过创建事件/循环序列来填充缺少的开始/停止行:
Pandas:Find the repeating patterns in a column and group them as cycles。
我在每个序列中定位了重复的开始/停止值,并根据我分配给除最后一个重复项之外的所有标记的标记来估算相应的值,遵循另一个有用的链接: Insert New Rows into Pandas DF Based On Conditional Loop。 由于我的数据集很大,我需要一整天半的时间才能完成运行,但它确实有效。
当前问题
我目前的流程没有考虑到以下几点:
- 不应将“过程”视为一个循环
- 不应在活动周期中考虑背靠背发生的起止事件
- 在预期周期 2 和 3 的开始-开始-停止场景中,我的脚本仅涵盖在第一次开始时插入新的停止行,没有考虑活动何时发生。
id | 活动 | 周期 | 预期周期 | id | 活动 | 周期 | 预期周期 | ||
---|---|---|---|---|---|---|---|---|---|
1 | 开始 | 2 | 1 | 1 | 开始 | 3 | |||
1 | 一 | 2 | 1 | 1 | 开始 | 3 | 2 | ||
1 | 开始 | 2 | 1 | b | 3 | 2 | |||
1 | 停止 | 2 | 1 | 停止 | 3 | 2 |
示例数据的代码:
data = {'id': {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: 2,16: 2,17: 2,18: 2,19: 2,20: 2,21: 2,22: 2,23: 2},'activity': {0: 'start',1: 'stop',2: 'processing',3: 'start',4: 'a',5: 'start',6: 'stop',7: 'processing',8: 'start',9: 'start',10: 'b',11: 'c',12: 'stop',13: 'd',14: 'e',15: 'f',16: 'start',17: 'processing',18: 'g',19: 'h',20: 'i',21: 'stop',22: 'start',23: 'stop'},'cycle': {0: 1,3: 2,4: 2,5: 2,6: 2,7: 2,8: 3,9: 3,10: 3,11: 3,12: 3,13: 3,14: 3,15: 3,16: 4,17: 4,18: 4,19: 4,20: 4,21: 4,22: 5,23: 5},'intended_cycle': {0: np.nan,1: np.nan,2: np.nan,3: 1.0,4: 1.0,5: np.nan,6: np.nan,7: np.nan,8: np.nan,9: 2.0,10: 2.0,11: 2.0,12: 2.0,13: 3.0,14: 3.0,15: 4.0,16: np.nan,17: np.nan,18: 5.0,19: 5.0,20: 5.0,21: 5.0,22: np.nan,23: np.nan}}
pd.DataFrame.from_dict(data)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)