Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Python从两个长度相同的列表中获取唯一和最小的值对_Python 3.x_Pandas_List_Numpy - Fatal编程技术网

Python 3.x Python从两个长度相同的列表中获取唯一和最小的值对

Python 3.x Python从两个长度相同的列表中获取唯一和最小的值对,python-3.x,pandas,list,numpy,Python 3.x,Pandas,List,Numpy,我有两份清单: index = [1,1,1,1,2,2,2,2,3,4,5,5,5,6,7,8,9,10,10,10] value = [2,3,2,1,2,4,6,8,2,1,5,2,7,2,2,2,1,55,1,11] 相同的长度,但我希望得到的回报是索引列表中唯一的数字和值列表中根据索引的最小值 结果应该是: index_result = [1,2,3,4,5,6,7,8,9,10] value_result = [1,2,2,1,2,2,2,2,1,1] 我试过: index =

我有两份清单:

index = [1,1,1,1,2,2,2,2,3,4,5,5,5,6,7,8,9,10,10,10]
value = [2,3,2,1,2,4,6,8,2,1,5,2,7,2,2,2,1,55,1,11]
相同的长度,但我希望得到的回报是索引列表中唯一的数字和值列表中根据索引的最小值

结果应该是:

index_result = [1,2,3,4,5,6,7,8,9,10]

value_result = [1,2,2,1,2,2,2,2,1,1]
我试过:

index = [1,1,1,1,2,2,2,2,3,4,5,5,5,6,7,8,9,10,10,10]
value = [2,3,2,1,2,4,6,8,2,1,5,2,7,2,2,2,1,55,1,11]
index_result = []
value_result = []
#global small_value
j = 0
while j < len(index):
    if j == 0:
        try:
            if index[j] == index[j+1]:
                small_value = min(value[j],value[j+1])
            elif index[j] != index[j+1]:
                index_result.append(index[j])
                value_result.append(value[j])
        except IndexError as e:
            print(e)
            pass
        j = j + 1
        print('small value is for index j ==0')
        print(small_value)
    elif j <len(index) - 1:
        try:
            # if index[j] == index[j-1]:
            #     small_value = min(value[j],value[j-1])
            if index[j] != index[j+1] and index[j] != index[j-1]:
                index_result.append(index[j])
                value_result.append(value[j])
            elif index[j] != index[j+1] and index[j] == index[j-1]:
                index_result.append(index[j])
                value_result.append(small_value)
        except IndexError as e:
            print(e)
            pass
        j = j + 1
        print('small value is for index 0 < j <len(index)')
        print(small_value)
    elif j == len(index) - 1:
        try:
            if index[j] == index[j-1]:
                small_value = min(value[j],value[j-1])
                index_result.append((index[j]))
                value_result.append(small_value)
            elif index[j] != index[j-1]:
                index_result.append(index[j])
                value_result.append(value[j])
        except IndexError as e:
            print(e)
            pass
        j = j + 1
        print('small value is for j = len(index) - 1')
        print(small_value)

print (index_result)
print (value_result)
index=[1,1,1,2,2,2,3,4,5,5,6,7,8,9,10,10]
值=[2,3,2,1,2,4,6,8,2,1,5,2,7,2,2,2,1,1,55,1,11]
索引_结果=[]
值_结果=[]
#全局小值
j=0
而j
pd.DataFrame([index,value]).T.sort_values([0,1]).drop_duplicates(0)
     0  1
3    1  1
4    2  2
8    3  2
9    4  1
11   5  2
13   6  2
14   7  2
15   8  2
16   9  1
18  10  1

我想这就是你想要实现的

import math

indices = [1,1,1,1,2,2,2,2,3,4,5,5,5,6,7,8,9,10,10,10]
values = [2,3,2,1,2,4,6,8,2,1,5,2,7,2,2,2,1,55,1,11]

result = [math.inf] * max(indices)

for i, v in zip(indices, values):
    result[i-1] = min(result[i-1], v) # Apparently 1 based indexing

print(result)

[1, 2, 2, 1, 2, 2, 2, 2, 1, 1]

如果您的
索引
像示例中那样是单调递增的,您可以使用
itertools.groupby

from itertools import groupby

d = {k: min([x[1] for x in g]) for k, g in groupby(zip(index, value), 
                                                     lambda x: x[0])}

In [95]: d
Out[95]: {1: 1, 2: 2, 3: 2, 4: 1, 5: 2, 6: 2, 7: 2, 8: 2, 9: 1, 10: 1}

index_result = list(d.keys())

Out[103]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

value_result = list(d.values())

Out[105]: [1, 2, 2, 1, 2, 2, 2, 2, 1, 1]
Numpy解决方案:

index = np.array([1,1,1,1,2,2,2,2,3,4,5,5,5,6,7,8,9,10,10,10])
value = np.array([2,3,2,1,2,4,6,8,2,1,5,2,7,2,2,2,1,55,1,11])

[value[index == i].min() for i in np.unique(index)]
# [1, 2, 2, 1, 2, 2, 2, 2, 1, 1]

…和根据索引的值列表的最小值这是什么意思?
pd.DataFrame({'value':value,'index':index})。groupby('index')。min()
?Yup有相同的答案@QuangHoang@JerryM. 对不起,我的英语意思是:1。索引列表应该只有唯一的,没有多余的数字2。值列表应返回与索引列表配对的值池中的最小值,例如:对于两个LIT:index[1,1,2]和[3,4,6],结果应为index[1,2]和[3,6]@QuangHoang我能拥抱你吗!?非常感谢您知道如何获取[1,2,3,4,5,6,7,8,9,10]索引列表吗?像一个独特的.function?@DaweiZhang
list(dict.from_iterable(index))