Перебирать список и заново просматривать список в python? - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть ранжированный список элементов:

['B','D','Z','A','C']

Это означает, что «B» - это ранг 1, «E» - это ранг 2 и т. Д.

Теперь у меня естьdataframe df:

Category 1  Category 2  Category 3
A              B           C
C              A           A
G              D           B
D             Nan         Nan

Исходя из введенного пользователем, скажем, пользователь ввел «Категория 1».Соответственно, мне нужно перейти на фрейм данных df и найти имя столбца, соответствующее вводу пользователя (в нашем случае «Категория 1»).

И проверить, доступны ли какие-либо из наших значений в списке ранжирования вэтот столбец «Категория 1» и выведите переоцененный список:

['D','A','C','B','Z']

Логика для реализации:

  1. Просмотрите начальный ранжированный список элементов и посмотритеесли какие-либо элементы доступны в «Категории 1».Если это доступно, то оцените их как 1-е, 2-е и т. Д. На основе их начального ранжирования (поддержание порядка ранжирования в начальном ранжированном списке).

    Например: из начального ранжированного списка элементы D',' A ',' C 'доступны в категории 1.Теперь получите их соответствующие ранги от начального ранга и переназначьте их в новом списке сверху.Таким образом, наши первые 3 элемента в переоцененном списке будут ['D','A','C'].

  2. Проверьте оставшиеся элементы в начальном ранжированном списке - «B», «Z».Поскольку они не находятся в «Категории 1», мы должны ранжировать их последними, поддерживая их соответствующий порядок ранжирования.Таким образом, наш окончательный переоцененный список будет ['D','A','C','B','Z'].

1 Ответ

0 голосов
/ 23 февраля 2019

По сути, идея состоит в том, чтобы сравнить каждый элемент в Ранжированном списке с заданным столбцом , и, если он присутствует, вы должны добавить их в новый список ,Это гарантирует, что вы не нарушите уже существующее ранжирование.

Вышеуказанная часть может быть легко достигнута простым для цикла .

Следующая часть - найти всеуникальные элементы в списке ранжирования, которых нет в новом списке и добавляются оба списка.

Вот код:

import pandas as pd
import numpy as np

#Create the Standard Ranked List
rank_list=['B','D','Z','A','C']

#Create the sample DataFrame
data={'Category 1':['A','C','G','D'],'Category 2':['B','A','D','Nothing'],'Category 3':['C','A','B','Nothing']}
df=pd.DataFrame(data)
#Replace all 'Nothing' Values with 'NaN'
df.replace('Nothing',np.NaN)

#Take the input from the user
print("Enter Category: ")
user_input=input()

#Create one list for filtering and one for the final result
present_values=[]
final_list=[]
#Compare all values in Standard Ranked List with df and if present, append to present_values
for value in rank_list:
       if value in df[user_input].values:
           present_values.append(value)

#Check for unique value not present in present_values   
for value in rank_list:
    if value not in present_values:
        final_list.append(value)

#Add both the lists
final_list=present_values+final_list

print("My final list is: ")
print(final_list)

Примечание: не делайтеНе забудьте обработать случаи, когда пользователь вводит данные как «категория 1», но вам нужно «Категория 1»

Лучший способ справиться с этим - сделать все имена столбцов строчными и независимо от того, что может быть вводом, преобразует все входные данные в нижний регистр.

Удачи!

Пусть CODE будет с вами!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...