Skip to main content
 首页 » 编程设计

python之折叠 Python 列表,保留唯一列和最高值

2025年05月04日12oomusou

我有一个列表列表

data = [ ['fruit', 'apple', 'v1', 'data 1'], 
         ['fruit', 'apple', 'v2', 'data 2'], 
         ['fruit', 'apple', 'v3', 'data 3'], 
         ['fruit', 'banana', 'v1', 'data 4'], 
         ['fruit', 'banana', 'v2', 'data 5'], 
         ['animal', 'dog', 'v1', 'data 6'] ] 

如何根据前 2 列并使用来自最高 v 的数据进行折叠?

result = [ ['fruit', 'apple', 'v3', 'data 3'], 
           ['fruit', 'banana', 'v2', 'data 5'], 
           ['animal', 'dog', 'v1', 'data 6'] ] 

列表在第一列中排序,但第二列不是。我的解决方案基于假设两列都已排序,因此它不起作用,我不知道从这里去哪里。

previous = [] 
result = [] 
for a, b, c, d in data: 
    if not all(x in previous for x in [a, b]): 
        final.append([a, b, c, d]) 
        previous = [a, b, c, d] 
    else: 
        if previous[2] < c: 
            final[-1][2] = c 
            final[-1][3] = d 
            previous = [a, b, c, d] 
print result 

请您参考如下方法:

这是一种方式。

import pandas as pd 
 
data = [ ['fruit', 'apple', 'v1', 'data 1'], 
         ['fruit', 'apple', 'v2', 'data 2'], 
         ['fruit', 'apple', 'v3', 'data 3'], 
         ['fruit', 'banana', 'v1', 'data 4'], 
         ['fruit', 'banana', 'v2', 'data 5'], 
         ['animal', 'dog', 'v1', 'data 6'] ] 
 
df = pd.DataFrame(data, columns=['Col1', 'Col2', 'Col3', 'Col4']) 
df['Grouper'] = df['Col1'] + df['Col2'] 
df['Order'] = df['Col3'].map(lambda x: int(x[-1])) 
 
df = df.sort_values(['Grouper', 'Order'], ascending=[True, False])\ 
       .drop_duplicates('Grouper')\ 
       .drop(['Grouper', 'Order'], 1) 
 
lst = df.values.tolist() 
 
# [['animal', 'dog', 'v1', 'data 6'], 
#  ['fruit', 'apple', 'v3', 'data 3'], 
#  ['fruit', 'banana', 'v2', 'data 5']]