仅对列表中的正数进行排名,负数应在 Pandas 中替换为 -1
Ranking only positive numbers in a list , and negative number should replace with -1 in Pandas
可重现代码:
import numpy as np
lst = [-69,-68,-58,-39,-18,-11,-10,-9,-8,0,2,7,7,21,31,31,34,46,49,89,128]
尝试了代码:
sorted_list = [sorted(lst).index(x) for x in lst]
sorted_list
预期输出:
[-1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
您可以使用 map
或列表理解将每个负数替换为 -1。这可以通过条件来完成:
# list comprehension
l = [(-1 if x < 0 else x) for x in l]
# map
l = list(map(lambda x: -1 if x < 0 else 0, l))
或者如果数字是整数,则 -1
是“最高”可能的负数,因此您可以使用 max
:
# list comprehension
l = [max(-1, x) for x in l]
# map
l = list(map(lambda x: max(-1, x), l))
然后您可以使用 list.sort
或 sorted
.
对结果列表进行排序
最终代码:
def sorted_and_minus1(l):
return sorted(max(-1, x) for x in l)
lst = [-69,-68,-58,-39,-18,-11,-10,-9,-8,0,2,7,7,21,31,31,34,46,49,89,128]
sorted_lst = sorted_and_minus1(lst)
print(sorted_lst)
# [-1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 2, 7, 7, 21, 31, 31, 34, 46, 49, 89, 128]
创建一个Pandas系列,然后用-1替换底片,然后对它们进行排序:
import pandas as pd
import numpy as np
lst = [-69,-68,-58,-39,-18,-11,-10,-9,-8,0,2,7,7,21,31,31,34,46,49,89,128]
s = pd.Series(lst)
s[s<0] = -1
print(s.sort_values())
可重现代码:
import numpy as np
lst = [-69,-68,-58,-39,-18,-11,-10,-9,-8,0,2,7,7,21,31,31,34,46,49,89,128]
尝试了代码:
sorted_list = [sorted(lst).index(x) for x in lst]
sorted_list
预期输出:
[-1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
您可以使用 map
或列表理解将每个负数替换为 -1。这可以通过条件来完成:
# list comprehension
l = [(-1 if x < 0 else x) for x in l]
# map
l = list(map(lambda x: -1 if x < 0 else 0, l))
或者如果数字是整数,则 -1
是“最高”可能的负数,因此您可以使用 max
:
# list comprehension
l = [max(-1, x) for x in l]
# map
l = list(map(lambda x: max(-1, x), l))
然后您可以使用 list.sort
或 sorted
.
最终代码:
def sorted_and_minus1(l):
return sorted(max(-1, x) for x in l)
lst = [-69,-68,-58,-39,-18,-11,-10,-9,-8,0,2,7,7,21,31,31,34,46,49,89,128]
sorted_lst = sorted_and_minus1(lst)
print(sorted_lst)
# [-1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 2, 7, 7, 21, 31, 31, 34, 46, 49, 89, 128]
创建一个Pandas系列,然后用-1替换底片,然后对它们进行排序:
import pandas as pd
import numpy as np
lst = [-69,-68,-58,-39,-18,-11,-10,-9,-8,0,2,7,7,21,31,31,34,46,49,89,128]
s = pd.Series(lst)
s[s<0] = -1
print(s.sort_values())