我目前有一個帶有一些列的熊貓資料框。我正在尋找建立一個列,Sequential列出在周期的那部分記錄的迭代。我目前正在使用itertools.cycle, 和固定數量的迭代來執行此操作block_cycles,如下所示:
# Fill out Sequential Numbers
block_cycles = 330
lens = len(raw_data.index)
sequential = list(itertools.islice(itertools.cycle(range(1, block_cycles)),lens))
interim_output['Sequential'] = sequential
輸出如下:
print(interim_output['Sequential'])
0 1
1 2
2 3
...
329 330
331 1
332 2
332 3
如果一個回圈中的迭代次數相同,這會很好。但是,經過調查,我發現并非每個周期都包含相同數量的迭代。我還有另一列,CycleNumber,其中包含迭代所屬的回圈數。它看起來像這樣:
print(raw_data['CycleNumber'])
0 1
1 1
2 1
3 1
4 1
51790 4936
51791 4936
51792 4936
51793 4936
51794 4936
因此,例如,一個回圈可能包含 330 次迭代,而另一個回圈可能包含 333、331 等等 - 不能保證相同。回圈數中的值逐漸增加。
我已經建立了每個回圈包含的迭代量的字典cycle_freq,它看起來像這樣:
# Calculate the number of iterations each cycle contains
cycle_freq = {}
for item in cycle_number:
if (item in cycle_freq):
cycle_freq[item] = 1
else:
cycle_freq[item] = 1
print (cycle_freq)
{1: 330, 2: 332, 3: 331, 4: 332, 5: 332, 6: 333, 7: 333, 8: 330....
4933: 331, 4934: 334, 4935: 287, 4936: 24}
我怎樣才能使用這本字典來替換常量 variable block_cycles,根據該回圈中的迭代次數創建一個大的序列號串列?到目前為止,這是我試圖讓它使用包含在字典中的值的邏輯cycle_freq,但無濟于事:
for i in cycle_freq:
iteration = list(itertools.islice(itertools.cycle(range(1, cycle_freq[i])),lens))
sequential.append(iteration)
我想要的輸出如下所示:
0 1
1 2
3 3
...
329 330
330 1
332 2
...
661 332
662 1
663 2
任何幫助將不勝感激!
uj5u.com熱心網友回復:
我使用了一種解決方法并放棄了 itertools:
sequential = []
for _, cycles in cycle_freq.items():
seq = [cycle for cycle in range(1, cycles 1)]
sequential.extend(seq)
interim_output['Sequential'] = sequential
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/471963.html
