遍历列表并在python中重新排列列表?

时间:2019-02-23 16:41:01

标签: python-3.x loops

我有一个排名的元素列表:

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

这意味着'B'是等级1,'E'是等级2,依此类推。

现在,我有一个数据框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”中提供了元素“ D”,“ A”,“ C”。现在,从初始排名中获取各自的排名,然后从顶部开始在新列表中对其进行重新排名。因此,我们在重新排名列表中排名前三的元素将是['D','A','C']

  2. 检查初始排名列表中的其余元素- 'B','Z'。由于它们不在“类别1”中,因此我们需要对它们进行最后排名,并保持各自的排名顺序。因此,我们最终的重新排序列表将为['D','A','C','B','Z']

1 个答案:

答案 0 :(得分:0)

基本上,这个想法是将排名列表中的每个元素与给定的进行比较,如果存在,则必须将它们添加到新列表中< / em>。这样可以确保您不会打扰已经存在的排名。

上面的部分可以通过简单的 for循环轻松实现。

下一部分是在排名列表中查找所有在新列表中不存在的唯一元素,并添加两个列表。

代码如下:

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 可以和你在一起!