這裏有一個同事想出了一個解決方案(可能不是最有效的,但它的伎倆):
輸入數據
a = pd.Series([30, 10, 20, 25, 35, 15])
創建 '更高' 列
b = []
for idx, value in enumerate(a):
count = 0
for i in range(idx, 0, -1):
if value < a.loc[i-1]:
break
count += 1
b.append([value, count])
higher = pd.DataFrame(b, columns=['Value', 'Higher'])
創建 '下' 列
c = []
for idx, value in enumerate(a):
count = 0
for i in range(idx, 0, -1):
if value > a.loc[i-1]:
break
count += 1
c.append([value, count])
lower = pd.DataFrame(c, columns=['Value', 'Lower'])
合併這兩個新系列
print(pd.merge(higher, lower, on='Value'))
Value Higher Lower
0 30 0 0
1 10 0 1
2 20 1 0
3 25 2 0
4 35 4 0
5 15 0 3
謝謝,我不認爲我們會找到避免循環的解決方案。 –
更新爲使用稍微更有效的求和算法,只需抓取接近的值,然後求和即可。 – benjwadams