Поиск индексов для заданного значения в датафрейме

Суть в том, чтобы по входящей строке вида

data_1 ... data_n

программа искала индекс строки и имя столбца каждого элемента в таблице и выводила его в формате

data_1 - (index, column_name)
...
data_1 - (index, column_name)
data_2 - (index, column_name)
...
data_2 - (index, column_name)
...
data_n - (index, column_name)

Например, дан датафрейм:

        module_name version   python
   0    Pandas      1.3.5     3.7
   1    SciKitLearn 1.0       3.7
   2    SeaBorn     0.11.2    3.7
   3    NumPy       1.23.dev0 3.7

Также дана строка с данными для поиска:

Pandas 0.11.2 3.7

на выходе должно получится:

Pandas - (0, module_name)
0.11.2 - (2, version)
3.7 - (0, python)
3.7 - (1, python)
3.7 - (2, python)
3.7 - (3, python)

Мой код:

import pandas as pd
n=int(input())
d={}
for _ in range(n):
    temp=input().split()
    d[temp.pop(0)]=temp
df=pd.DataFrame(d)    
my_list=input().split()
for i in df.columns.values:
    for j in df[i]:
        for k in my_list:            
            if k==j:
                print(j, '-', f'({df[df[i] == j].index[0]},{i})')

Из него получается так:

Pandas - (0,module_name)
0.11.2 - (2,version)
3.7 - (0,python)
3.7 - (0,python)
3.7 - (0,python)
3.7 - (0,python)

Подскажите пожалуйста, как докрутить мой код так, чтобы по индексам он тоже пробегал, чтобы результат был как в примере? Спасибо!


Ответы (1 шт):

Автор решения: strawdog

Что-то вы городите циклы прям один на другом. попробуйте так, например:

for i in ["Pandas", "0.11.2", 3.7]:
    res = df[df==i].stack().index.values
    for j in res:
        print(f"{i} - {j}")

на выходе:

Pandas - (0, 'module_name')
0.11.2 - (2, 'version')
3.7 - (0, 'python')
3.7 - (1, 'python')
3.7 - (2, 'python')
3.7 - (3, 'python')
→ Ссылка