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

时间:2019-03-30 04:50:42

标签: python

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

  

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]并找到最小值和最大值,然后每天重复一次。但是我认为必须有一种方法可以自动比较具有匹配字符串的嵌套列表。

感谢您的帮助。

编辑:文本文件的图像

enter image description here

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

首先,您可以使用groupby按日期分组,并使用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之前,请确保按日期对数据进行排序。

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

答案 2 :(得分:1)

function add($request)
{
    $this->NOM_ARTICLE = $request->NOM_ARTICLE;
    $this->LABEL_TYPE = $request->LABEL_TYPE;
    $this->PHOTO_ARTICLE = $request->PHOTO_ARTICLE;
    $this->PHOTO_ARTICLE = $request->PHOTO_ARTICLE;
    $this->save();

    return $this->id;
}