[英]Python - How to check if the next value in a list is the same as the previous?
[英]Given a number, how to get the previous and next value inside a list?
我有以下 dataframe:
VALUE_TO_FIND UNORDERED_LIST
5 [0,10]
3 [1,0,10,8,4,2]
2 [9,10,0]
5 [4,8,0,1,2,10]
4 [0,10,4]
给定列VALUE_TO_FIND
的值,我如何获得UNORDERED_LIST
中的上一个和下一个值?
VALUE_TO_FIND UNORDERED_LIST PREVIOUS_VALUE NEXT_VALUE
5 [0,10] 0 10
3 [1,0,10,8,4,2] 2 4
2 [9,10,0] 0 9
5 [4,8,0,1,2,10] 4 8
4 [0,10,4] 4 4
注意: UNORDERED_LIST
将始终具有VALUE_TO_FIND
的最小值和最大值
可能有更有效的解决方案,但我尝试过zip
ping 两个相关列:
import pandas as pd
df = pd.DataFrame({'VALUE_TO_FIND': [5, 3, 2, 5, 4,],
'UNORDERED_LIST': [[0,10], [1,0,10,8,4,2], [9,10,0], [4,8,0,1,2,10], [0,10,4],]})
def find_prev_next(x, lst):
return max(y for y in lst if y <= x), min(y for y in lst if y >= x) # tuple
_ = [find_prev_next(x, lst) for x, lst in zip(df.VALUE_TO_FIND, df.UNORDERED_LIST)]
df['PREVIOUS_VALUE'], df['NEXT_VALUE'] = zip(*_)
print(df)
# VALUE_TO_FIND UNORDERED_LIST PREVIOUS_VALUE NEXT_VALUE
# 0 5 [0, 10] 0 10
# 1 3 [1, 0, 10, 8, 4, 2] 2 4
# 2 2 [9, 10, 0] 0 9
# 3 5 [4, 8, 0, 1, 2, 10] 4 8
# 4 4 [0, 10, 4] 4 4
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.