基于范围python对行进行分组

时间:2016-08-20 20:49:20

标签: python rows

我有一个大文本文件,我试图根据间隔200对第一列进行分组。在下面的示例代码中,前四行将在一个组中,后三行在另一个组中,并且单独组中的最后一行。我的想法是基于for循环对它们进行分组,条件增加200,但是无法使其工作。

000008  34.576  -87.234
000025  34.825  -87.935
000123  35.935  -86.344
000154  34.395  -86.903
000234  35.219  -86.945
000322  34.240  -86.527
000359  34.893  -87.573
000412  35.291  -87.392

我将它们分组后,我想检查最后两列是否在指定范围内。如果是,则将这些行写入新的输出文件。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

您可以将值除以200以获得groupby的键:

>>> rows = '''000008  34.576  -87.234
000025  34.825  -87.935
000123  35.935  -86.344
000154  34.395  -86.903
000234  35.219  -86.945
000322  34.240  -86.527
000359  34.893  -87.573
000412  35.291  -87.392'''.splitlines()

>>> from itertools import groupby
>>> for _, group in groupby(rows, key=lambda row: int(row.split()[0]) // 200):
        print(list(group))

['000008  34.576  -87.234', '000025  34.825  -87.935', '000123  35.935  -86.344', '000154  34.395  -86.903']
['000234  35.219  -86.945', '000322  34.240  -86.527', '000359  34.893  -87.573']
['000412  35.291  -87.392']

如果号码总是有六位数,则可以改为使用int(row[:6]) // 200