Поиск индексов для заданного значения в датафрейме
Суть в том, чтобы по входящей строке вида
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')