我可以使用 itertools.count 在列中添加值,并在特定点重置吗?

Can I use itertools.count to add values in a column, resetting at a certain point?

我正在尝试从数据框中的列创建时间戳列表,该列表会在特定时间后重置为零。所以,如果限制是 4,我希望计数将列的值加起来直到位置 4,然后重置为零,并继续添加列的值,从位置 5 等等,直到它到达列的长度。我在脚本的前面使用 itertools.islice 创建了一个计数器,所以我想知道我是否可以结合使用它和 itertools.count 来做类似的事情?到目前为止,这是我的代码:

cycle_time = list(itertools.islice(itertools.count(0,raw_data['Total Time (s)'][lens]),range(0, block_cycles),lens))

其中raw_data['Total Time (s)']包含我希望加起来的值,block_cycles是我想在重置前在dataframe列中加起来的数字,lens是长度数据框中的列。理想情况下,我列表的输出如下所示:

print(cycle_time)
0
0.24
0.36
0.57
0
0.13
0.32
0.57

根据此输入计算得出:

print(raw_data['Total Time (s)'])
0
0.24
0.36
0.57
0.7
0.89
1.14

然后我将其附加到数据框中的一个新列,interim_data_output['Cycle time (s)'] 详细说明了 'cycle' 中该点经过的时间。 block_cycles 是每个大的迭代次数 'cycle' 这就是我要对列表做的事情:

interim_data_output['Cycle time (s)'] = cycle_time

我有点迷路了,这甚至可以使用这些方法吗?出于性能原因,我想使用 itertools。任何帮助将不胜感激!

鉴于评论中的讨论,这里有一个例子:

df = pd.DataFrame({'Total Time (s)':[0, 0.24, 0.36, 0.57, 0.7, 0.89, 1.14]})
   Total Time (s)
0            0.00
1            0.24
2            0.36
3            0.57
4            0.70
5            0.89
6            1.14

你可以这样做:

block_cycles = 4

# Calculate cycle times.
cycle_times = df['Total Time (s)'].diff().fillna(0).groupby(df.index // block_cycles).cumsum()

# Insert the desired zeros after all cycles.
for idx in range(block_cycles, cycle_times.index.max(), block_cycles):
    cycle_times.loc[idx-0.5] = 0
    
cycle_times = cycle_times.sort_index().reset_index(drop=True)
print(cycle_times)

给出:

0    0.00
1    0.24
2    0.36
3    0.57
4    0.00
5    0.13
6    0.32
7    0.57
Name: Total Time (s), dtype: float64