我有一个看起来像这样的变量:my_value = 188
我有一个看起来像这样的列表:
my_list = [
['Morocco', 'Meat', '190,00', '0,15'],
['Morocco', 'Meat', '189,90', '0,32'],
['Morocco', 'Meat', '189,38', '0,44'],
['Morocco', 'Meat', '188,94', '0,60'],
['Morocco', 'Meat', '188,49', '0,78'],
['Morocco', 'Meat', '187,99', '0,101'],
['Spain', 'Meat', '190,76', '0,10'],
['Spain', 'Meat', '190,16', '0,20'],
['Spain', 'Meat', '189,56', '0,35'],
['Spain', 'Meat', '189,01', '0,40'],
['Spain', 'Meat', '188,13', '0,75'],
['Spain', 'Meat', '187,95', '0,85'],
['Italy', 'Meat', '190,20', '0,11'],
['Italy', 'Meat', '190,10', '0,31'],
['Italy', 'Meat', '189,32', '0,45'],
['Italy', 'Meat', '188,61', '0,67'],
['Italy', 'Meat', '188,01', '0,72'],
['Italy', 'Meat', '187,36', '0,80']]
如您所见,my_list
索引中的数字[2]
是递减的,而索引中的数字[3]
是递增的。现在,对于每个列表,我想检查最接近但不是最接近索引[3]
的索引[2]
,my_value
它不应低于my_value。
我尝试下面的代码:
for key,sublists in itertools.groupby(my_list,lambda y:y[0]):
v=[] #initialize it in case no element fulfill the condition
for v in itertools.takewhile(lambda x:float(x[-1].replace(",","."))<my_value ,sublists):
pass
if v:
print(v[-1])
我收到以下输出:
0,101
0,85
0,80
我想要的输出是:
0,78
0,75
0,72
pandas
救援工作就是这样的工作:
import pandas as pd
my_value = 188
my_list = [] # complete this with your list above
df = pd.DataFrame(my_list) # make a DataFrame out of your list
df[2] = df[2].str.replace(",", ".").astype(float) # convert those strings to actual floats
df[3] = df[3].str.replace(",", ".").astype(float)
selected = df[df[2]>my_value].groupby(by=0).agg({2:'min',3:'last'}) # selects what you want
print(list(selected[3])) # if you just want those values
将输出
[0.72,0.78,0.75]
selected
看起来像:
0 2 3
Italy 188.01 0.72
Morocco 188.49 0.78
Spain 188.13 0.75
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句