繁体   English   中英

如何在具有匹配字符串的嵌套列表中找到索引的最小值和最大值?

[英]How to find the min and max values of an index in nested lists with matching strings?

我有一个包含潮汐数据的文本文件,前几行是:

1月4日星期四,11.58,0.38米

1月4日星期四,16.95,0.73米

1月4日,星期四,23.68,0.02米

1月5日星期五,6.48,0.83米

1月5日星期五,12.42,0.33米

等等,并且还会持续5天的数据。

我已将这些数据转换为嵌套列表,因此现在将其打印为:

[['Thursday 4 January', 11.58, 0.38], ['Thursday 4 January', 16.95, 0.73], ['Thursday 4 January', 23.68, 0.02], ['Friday 5 January', 6.48, 0.83], ['Friday 5 January', 12.42, 0.33].....]

依此类推,对文件中的每一行数据来说,每个列表的第一个索引是字符串中的日期,第二个和第三个索引是浮点型。

对于每个具有匹配的[0]索引的嵌套列表(日期),我需要找到每个匹配的嵌套列表[2]索引(潮高)的最低和最高浮动值,并将它们每天打印到屏幕上。

例如:

Thursday 4 January: 0.02 meters at lowest and 0.73 meters at highest
Friday 5 January: 0.33 meters at lowest and 0.83 meters at highest

由于列表已经按天排列,因此我想算一下匹配的名称,然后手动进行比较,例如对于“ 1月4日星期四”,由于其中有3个,因此我只比较split_tides [0-2] [ 2]并找到最小值和最大值,然后每天重复一次。 但是我认为必须有一种方法可以自动比较具有匹配字符串的嵌套列表。

谢谢您的帮助。

编辑:文本文件的图像

在此处输入图片说明

以下是有助于您的代码段

from pandas import DataFrame

data = [['Thursday 4 January', 11.58, 0.38], ['Thursday 4 January', 16.95, 0.73], ['Thursday 4 January', 23.68, 0.02],
         ['Friday 5 January', 6.48, 0.83], ['Friday 5 January', 12.42, 0.33]]

df = DataFrame.from_records(data)

df.columns = ["Date", "Value", "Height"]

df.groupby(['Date'])['Height'].max()
df.groupby(['Date'])['Height'].min()

输出:

日期1月5日星期五0.83 1月4日星期四0.73

日期1月5日星期五0.33 1月4日星期四0.02

首先,您可以使用groupby按日期分组sort第3个索引高度sort 示例代码在这里:

    from itertools import groupby
    from operator import itemgetter

    data = [['Thursday 4 January', 11.58, 0.38], ['Thursday 4 January', 16.95, 0.73], ['Thursday 4 January', 23.68, 0.02],
         ['Friday 5 January', 6.48, 0.83], ['Friday 5 January', 12.42, 0.33]]

    for k, g in groupby(data, key=itemgetter(0)):
        a = sorted(g, key=itemgetter(2))
        print('{}: {} meters at lowest and {} meters at highest'.format(k, a[0][2], a[-1][2]))

输出:

Thursday 4 January: 0.02 meters at lowest and 0.73 meters at highest
Friday 5 January: 0.33 meters at lowest and 0.83 meters at highest

顺便说一句,在使用groupby in date之前,请确保按日期对数据进行排序。

希望对您有所帮助,如有其他问题,请发表评论。 :)

data = [['Thursday 4 January', 11.58, 0.38], ['Thursday 4 January', 16.95, 0.73], ['Thursday 4 January', 23.68, 0.02], ['Friday 5 January', 6.48, 0.83], ['Friday 5 January', 12.42, 0.33]]

dic={'day':[],'min':[],'max':[]}
for i in data :
    dic['day']+=[i[0]]
    dic['min']+=[i[1]]
    dic['max']+=[i[2]]



from collections import defaultdict
x = defaultdict(dict)

for i in dic['day']:
    x[i]={'min':[],'max':[]}

for i in range(len(dic['min'])):
    x[dic['day'][i]]['min']+=[dic['min'][i]]
    x[dic['day'][i]]['max']+=[dic['max'][i]]

print(dict(x))
"""
structure data for future use

{'Friday 5 January': {'max': [0.83, 0.33], 'min': [6.48, 12.42]},
 'Thursday 4 January': {'max': [0.38, 0.73, 0.02],
  'min': [11.58, 16.95, 23.68]}}
"""



result =[]
for i in x:
    result.append(r'{}: {} meters at lowest an {} meters at highest'.format(i,min(x[i]['min']),max(x[i]['max'])))


print(result)

"""output

['Thursday 4 January: 11.58 meters at lowest an 0.73 meters at highest', 'Friday 5 January: 6.48 meters at lowest an 0.83 meters at highest']
""""

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM