获取python中值最高的元素

2024-09-30 03:25:11 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我的制表符分隔文件是:

a b 77.8
a d 77.8
e f 56.7
e r 40.0

我想在第[0]行打印一个元素,在第[2]行打印最大值,但是当值相同时,要打印这两个元素,如何修改下面的代码?你知道吗

import csv
from itertools import groupby
from operator import itemgetter
with open('input.txt,'rb') as f1:
    with open('out.txt','wb') as f2:
        reader = csv.reader(f1, delimiter='\t')
        writer1 = csv.writer(f2, delimiter='\t')
        for group, rows in groupby(filter(lambda x: x[0]!=x[1], reader), key=itemgetter(0)):
            best = max(rows, key=lambda r: (float(r[2])))
            writer1.writerow(best)

所以,我的输出应该是这样的:

 a b 77.8
 a d 77.8
 e f 56.7

Tags: csvfromimporttxt元素aswithopen
2条回答

不必从rows写入max项,您可以按第三个值按降序对行进行排序,按第三个值对行进行分组,然后将项写入第一个组:

import csv
from itertools import groupby
from operator import itemgetter

with open('input.txt','rb') as f_in, open('out.txt','wb') as f_out:
    reader = csv.reader(f_in, delimiter='\t')
    writer1 = csv.writer(f_out, delimiter='\t')
    for group, rows in groupby(filter(lambda x: x[0]!=x[1], reader), key=itemgetter(0)):
        rows = sorted(rows, key=lambda r: (float(r[2])), reverse=True)
        _, best = next(groupby(rows, key=itemgetter(2)))
        writer1.writerows(best)

输出在out.txt

a   b   77.8
a   d   77.8
e   f   56.7

另一种使用pandas(读取和写入文件更好)的方法:

import pandas as pd

df = pd.read_table('eg.txt', header=None, sep=' ')

with open('output.txt', 'wb') as f:
    for c in set(df[0]):
        d = df[df[0] == c].sort_values(by=[2], ascending=False)
        d = d[d[2] == d[2].iloc[0]]
        d.to_csv(f, index=False, sep='\t', header=False)

输出:

a   b   77.8
a   d   77.8
e   f   56.7

相关问题 更多 >

    热门问题