我有一个排名的元素列表:
['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”中提供了元素“ D”,“ A”,“ C”。现在,从初始排名中获取各自的排名,然后从顶部开始在新列表中对其进行重新排名。因此,我们在重新排名列表中排名前三的元素将是['D','A','C']
。
检查初始排名列表中的其余元素-
'B','Z'。由于它们不在“类别1”中,因此我们需要对它们进行最后排名,并保持各自的排名顺序。因此,我们最终的重新排序列表将为['D','A','C','B','Z']
。
答案 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 可以和你在一起!