python - 如何获取列表中最接近的值?
问题描述
我有一个看起来像这样的变量: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
在 index 中看到的数字[2]
正在下降,而 index 中的数字[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
推荐阅读
- javascript - 具有对象数组的深度展平嵌套数组
- android - 在用户触摸时关闭 FAB 子菜单
- sql-server - 如果我们需要 DAG 连接到 sql 服务器,要在气流环境的 docker 映像中添加什么?连接的代码是什么?
- python - 在 Colaboratory 中从 Google Drive 加载数据时遇到问题
- apache-flink - Apache flink - 早期触发窗口实现问题 - 收到重复的元素
- javascript - 每次呈现页面或视图时,Javascript 将数据保存到会话存储
- c# - 从数组脚本引用游戏对象时如何修复空引用?
- linux - win 10 上 Debian 子系统中的 VLC Pulse 音频错误
- java - 不接受 Spring Boot POST 请求特定的有效负载
- c# - 从 XML 文件中提取表数据