这里有一个同事想出了一个解决方案(可能不是最有效的,但它的伎俩):
输入数据
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