Как выбрать по столбцу только по первым двум цифрам?

Есть 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

...

→ Ссылка