我有一個這樣的專欄:
1
0
0
0
0
1
0
0
0
1
0
0
結果需要:
1
1
1
1
1
2
2
2
2
3
3
3
一種從 1 到 1 劃分等級并依次給出值的方法/演算法。
任何的想法?
uj5u.com熱心網友回復:
您可以遍歷串列并使用計數器更新列值,并在每次找到數字 1 時遞增它。
def rank(lst):
counter = 0
for i, column in enumerate(lst):
if column == 1:
counter =1
lst[i] = counter
uj5u.com熱心網友回復:
def fill_arr(arr):
curr = 1
for i in range(1, len(arr)):
arr[i] = curr
if i < len(arr)-1 and arr[i 1] == 1:
curr = 1
return arr
快速測驗
arr = [1,0,0,0,1,0,0,0,1,0,0]
fill_arr(arr)
[1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3]
思路如下:
- 通過向前
1看來跟蹤我們遇到它的s的數量,curr并在我們看到新的1s 時增加它。 - 將當前索引處的元素設定為
curr. - 我們從索引開始,
1因為我們知道在索引零處有一個 1。這有助于我們減少邊緣情況并使演算法更易于管理。
uj5u.com熱心網友回復:
您要查找的內容通常稱為累計金額;或者作為動詞,您希望越來越多地累積串列中的值。
對于 python 串列:
import itertools
l1 = [1,0,0,0,1,0,0,0,1,0,0]
l2 = list(itertools.accumulate(l1))
print(l2)
# [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3]
對于 numpy 陣列:
import numpy
a1 = numpy.array([1,0,0,0,1,0,0,0,1,0,0])
a2 = a1.cumsum()
print(a2)
# [1 1 1 1 2 2 2 2 3 3 3]
對于熊貓資料框中的一列:
import pandas
df = pandas.DataFrame({'col1': [1,0,0,0,1,0,0,0,1,0,0]})
df['col2'] = df['col1'].cumsum()
print(df)
# col1 col2
# 0 1 1
# 1 0 1
# 2 0 1
# 3 0 1
# 4 1 2
# 5 0 2
# 6 0 2
# 7 0 2
# 8 1 3
# 9 0 3
# 10 0 3
檔案:
- itertools.accumulate ;
- numpy.cumsum ;
- numpy.ndarray.cumsum ;
- pandas.DataFrame.cumsum ;
- pandas.Series.cumsum。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/355674.html
上一篇:查找字串串列中的差異
