Group values based on range of number in python
python
Solution
How about the following simple solution:
data = [(220921998, 2426),
(220921999, 2427),
(220922000, 2428),
(220922001, 2429),
...
(220922563, 2991),
(220922564, 2992)]
ref = 0
cnt = 0
out = []
for dt in data:
if dt[1]-ref > 20:
cnt += 1
ref = dt[1]
out.append((dt[0],dt[1],'project%d'%cnt))
Problem
I have a list as follows: ``` [(220921998, 2426), (220921999, 2427), (220922000, 2428), (220922001, 2429), (220922563, 2991), (220922564, 2992), (220922565, 2993), (220922566, 2994), (220922575, 3003), (220923958, 4386), (220924161, 4589), (220924170, 4598), (220924171, 4599), (220924172, 4600), (220924173, 4601), (220924912, 5340), (220926340, 6768), (220926341, 6769), (220926342, 6770), (220926343, 6771), (220926344, 6772), (220927052, 7480), (220927053, 7481), (220927054, 7482), (220927055, 7483), (220927056, 7484), (220927069, 7497), (220927071, 7499)] ``` I want to add a string to the list based on the second number. If second number in the list are within 20 or so of other second numbers, they will be assigned same 'project' name. See below: ``` [(220921998, 2426,project1), (220921999, 2427,project1), (220922000, 2428,project1), (220922001, 2429,project1), (220922563, 2991,project2), (220922564, 2992,project2), (220922565, 2993,project2), (220922566, 2994,project2), (220922575, 3003,project3), (220923958, 4386,project4), (220924161, 4589,project5), (220924170, 4598,project5), (220924171, 4599,project5), (220924172, 4600,project5), (220924173, 4601,project5), (220924912, 5340,project6), (220926340, 6768,project7), (220926341, 6769,project7), (220926342, 6770,project7), (220926343, 6771,project7), (220926344, 6772,project7), (220927052, 7480,project8), (220927053, 7481,project8), (220927054, 7482,project8), (220927055, 7483,project8), (220927056, 7484,project8), (220927069, 7497,project8), (220927071, 7499,project8)] ``` I have tried `groupby`, but couldn't find a way to work it for range.Any help would be great. Thank you