Найти колличество элементов, c разницей 0.3 pandas
Есть dataframe[[f1,f2,time]], в котором надо найти кол-во строк, разница time между которыми меньше 0.3 Ищу таким образом:
df = pd.read_csv('input.csv', delimiter=',').set_index('id').sort_values('time')
i = 1
while len(dd) > 0:
dd = df.diff(periods=i).query('f1 == 0 and f2 == 0 and time < 0.3')
i += 1
Код выполняется ужасно долго, нет ли способа это упростить?
Есть вот такой код, который выполняет всё тоже самое, но с памятью всё плохо
in_df = pd.read_csv(input_file, delimiter=',')
out_list = {'id':[], 'count':[]}
for f1 in range(M):
for f2 in range(M):
df = in_df.query(f'f1 == {f1} and f2 == {f2}').sort_values('time', ascending=False)[['id', 'time']]
work_list = df.values.tolist()
while len(work_list) > 0:
_, time = work_list.pop(0)
out_list['id'].append(int(_))
count = 0
for row in work_list:
if time - row[1] < dt:
count += 1
else:
break
out_list['count'].append(count)
Пример входного файла:
id,f1,f2,time
0,1,0,0.206520219143
1,0,0,0.233725001118
2,0,1,0.760992754734
3,1,1,0.92776979943
4,1,0,0.569711498585
5,0,1,0.99224586863
6,0,0,0.593264390713
7,1,0,0.694181201747
8,1,1,0.823812651856
9,0,1,0.906011017725
Выходного:
id,count
0,0
1,0
2,0
3,1
4,0
5,2
6,0
7,1
8,0
9,1