Выборка значений в DataFrame по нескольким интервалам
Есть столбец Time и Count - как методами pandas сделать датафрейм в котором будут только строки с временем скажем от 153000 до 154000 и 175000 до 181000. Пробую сделать это через циклы - но в огромном файле этот счет занимает очень много времени. Поэтому хочется узнать, как правильно сделать в пандас.
Time Count
145540 114550
145545 114570
145553 114560
145603 114590
145612 114560
145617 114570
145623 114550
145627 114550
145632 114560
145632 114570
145632 114560
145638 114550
145708 114550
145711 114550
Решение по типу df[(df['Time']>153000) & (df['Time']<154000) оказавается не слишком надежным
Ответы (1 шт):
Используйте between:
При:
Time Count
0 145540 114550
1 145545 114570
2 145553 114560
3 145603 114590
4 145612 114560
5 145617 114570
6 145623 114550
7 145627 114550
8 145632 114560
9 145632 114570
10 145632 114560
11 145638 114550
12 145708 114550
13 145711 114550
df[df["Time"].between(145500, 145600)]
получим:
Time Count
0 145540 114550
1 145545 114570
2 145553 114560
Если нужно использовать сразу несколько интервалов, то могу посоветовать такое решение: указываем интервал индекс с кортежами с пределами - в первом кортеже нижние пределы нужных нам интервалов, во втором - верхние то есть, запись [(145540, 145600), (145550, 145700)] означает два интервала: 145540-145550 и 145600-145700
rng = pd.IntervalIndex.from_tuples([(145540, 145600), (145550, 145700)])
res = df["Time"].apply(lambda x: any(rng.contains(x)))
тогда df[res] будет:
Time Count
1 145545 114570
2 145553 114560
3 145603 114590
4 145612 114560
5 145617 114570
6 145623 114550
7 145627 114550
8 145632 114560
9 145632 114570
10 145632 114560
11 145638 114550