Как выбрать по столбцу только по первым двум цифрам?
Есть DataFrame, в котором Инн является индексом (int).
Таблица выглядит следующим образом:
Инн Название Тип
231216 Орк есть
432569 Шрек нет
Подскажите, как сделать выборку по столбцу Инн по первым двум цифрам (остальные цифры не имеют значение)?
Ответы (2 шт):
Автор решения: MaxU
→ Ссылка
Пример:
search_items = [42, 43, 44]
res = df[df["Инн"].astype(str).str[:2].astype("int8").isin(search_items)]
результат:
In [22]: res
Out[22]:
Инн Название Тип
1 432569 Шрек нет
Автор решения: MaxU
→ Ссылка
Решение без преобразования столбца Инн в строки:
In [34]: mask = (df["Инн"] // 10**(np.ceil(np.log10(df["Инн"])).astype(int)-2)).isin(search_items)
In [35]: df[mask]
Out[35]:
Инн Название Тип
1 432569 Шрек нет
пошагово:
находим число разрядов числа:
In [37]: np.ceil(np.log10(df["Инн"])).astype(int)
Out[37]:
0 6
1 6
Name: Инн, dtype: int32
возводим 10 в степень (число разрядов минус 2):
In [38]: 10**(np.ceil(np.log10(df["Инн"])).astype(int)-2)
Out[38]:
0 10000
1 10000
Name: Инн, dtype: int32
делим (целочисленно) исходный ряд чисел на получившийся на предыдущем шаге результат:
In [39]: (df["Инн"] // 10**(np.ceil(np.log10(df["Инн"])).astype(int)-2))
Out[39]:
0 23
1 43
Name: Инн, dtype: int64
...