基于标记索引为DataFrame批量生成坡度列的技术需求
实现DataFrame中按Lap区间循环赋值incline列
背景与现有代码
现有DataFrame test_data 包含Marker列,已通过以下代码完成Lap列的赋值:
marker = "*" marker_indexes = test_data.index[test_data['Marker'] == marker].tolist() lap_count = 1 # Initialize the 'Lap' count for i in range(0, len(marker_indexes), 5): start_index = marker_indexes[i] end_index = min(marker_indexes[i + 4], len(resampled) - 1) test_data.loc[start_index:end_index, 'Lap'] = lap_count lap_count += 1
给定的marker_indexes列表如下:
marker_indexes = [ 36, 118, 240, 317, 348, 370, 488, 609, 694, 725, 746, 880, 1003, 1097, 1131, 1160, 1281, 1404, 1500, 1536, 1561, 1694, 1819, 1920, 1951 ]
需求说明
需要新增incline列,每个Lap对应的标记区间需依次循环赋值[1.1, 3, 7, 1.2, 0],填充规则示例如下:
| marker_index | Lap | incline |
|---|---|---|
| 36 | 1 | 1.1 |
| … | 1 | 1.1 |
| 118 | 1 | 1.1 |
| 119 | 1 | 3 |
| … | 1 | 3 |
| 240 | 1 | 3 |
| 241 | 1 | 7 |
| … | 1 | 7 |
| 317 | 1 | 7 |
| 318 | 1 | 1.2 |
| … | 1 | 1.2 |
| 348 | 1 | 1.2 |
| 349 | 1 | 0 |
| … | 1 | 0 |
| 370 | 1 | 0 |
后续Lap需重复上述赋值逻辑。
实现方案
通过遍历每个Lap对应的5个标记点,分割出子区间并依次赋值对应的incline值,代码如下:
# 定义incline的循环赋值模板 incline_values = [1.1, 3, 7, 1.2, 0] # 按每5个marker索引为一组(对应一个Lap)遍历 for lap_start_idx in range(0, len(marker_indexes), 5): # 获取当前Lap对应的5个marker索引 lap_markers = marker_indexes[lap_start_idx:lap_start_idx+5] # 遍历每个子区间,匹配对应的incline值 for i in range(len(lap_markers)): if i == 0: # 第一个区间:从第1个marker到第2个marker(包含两端) start = lap_markers[i] end = lap_markers[i+1] else: # 后续区间:从上一个marker的下一个索引到当前marker(包含两端) start = lap_markers[i-1] + 1 end = lap_markers[i] # 为区间赋值对应的incline值 test_data.loc[start:end, 'incline'] = incline_values[i]
代码说明
- 固定
incline_values作为每个Lap内5个区间的赋值模板; - 按每5个marker索引为一组划分Lap,遍历所有组;
- 对每组内的marker索引分割区间:
- 第一个区间覆盖第1个到第2个marker的所有行;
- 后续每个区间覆盖上一个marker的下一行到当前marker的所有行;
- 每个区间对应赋值
incline_values中的元素,实现跨Lap的循环复用逻辑。
内容的提问来源于stack exchange,提问作者Hansson
相关产品推荐
相关产品推荐

