我可以使用 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
我正在尝试从数据框中的列创建时间戳列表,该列表会在特定时间后重置为零。所以,如果限制是 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