0

无论如何我可以找到每个帐户名称和类型的 x1 或 x2 的前 2 个值吗?

我的文件如下所示:

   AccntName,Type,Value,x1,x2
   Accnt-01,A,0.001,85,1168
   Accnt-01,A,0.1814,65,664
   Accnt-01,A,11.1399,312,1861
   Accnt-01,A,12.228,55,305
   Accnt-01,A,13.3161,205,1095
   Accnt-01,B,15.0259,298,2139
   Accnt-01,B,17.9793,112,324
   Accnt-01,B,19.1451,2180,15194
   Accnt-02,A,20.3109,423,2947
   Accnt-02,A,13.3161,205,1095
   Accnt-02,A,15.0259,298,2139
   Accnt-02,A,19.0321,120,1323
   Accnt-02,B,20.3109,423,2947
   Accnt-02,B,13.3161,205,1095
   Accnt-02,B,15.0259,298,2139
   Accnt-02,B,19.0321,120,1323

输出如下内容:

Accnt-01,A,11.1399,312,1861 #top 2 values
Accnt-01,A,13.3161,205,1095 #for Accnt-01,A

Accnt-01,B,19.1451,2180,15194 #top 2 values
Accnt-01,B,15.0259,298,2139   #for Accnt-01,B

and so on.. for Accnt-02,A or B

任何建议都会非常有帮助。太感谢了。

4

2 回答 2

0

我不确定最后两个值是什么意思,所以我猜你的意思是两者的总和。使用csv库将数据拉入行。现在,假设您有每个帐户的列表,请使用此函数拉出前两个:

process_list(l):
    p_l = sorted(l, key=lambda l: l[-1] + l[-2])
    return p_l.pop(), p_l.pop()
于 2012-10-03T16:40:31.540 回答
0

怎么回事,今天好无聊。。。

这确实复制了您请求的输出。使用 csv 模块会更“强大”,但亲爱的读者,我会把它留给你。

csv=[line.strip() for line in """\
  AccntName,Type,Value,x1,x2
   Accnt-01,A,0.001,85,1168
   Accnt-01,A,0.1814,65,664
   Accnt-01,A,11.1399,312,1861
   Accnt-01,A,12.228,55,305
   Accnt-01,A,13.3161,205,1095
   Accnt-01,B,15.0259,298,2139
   Accnt-01,B,17.9793,112,324
   Accnt-01,B,19.1451,2180,15194
   Accnt-02,A,20.3109,423,2947
   Accnt-02,A,13.3161,205,1095
   Accnt-02,A,15.0259,298,2139
   Accnt-02,A,19.0321,120,1323
   Accnt-02,B,20.3109,423,2947
   Accnt-02,B,13.3161,205,1095
   Accnt-02,B,15.0259,298,2139
   Accnt-02,B,19.0321,120,1323
""".splitlines()]

maxes={}
header=csv[0].split(',')
for line in csv[1:]:
    eles=line.split(',')
    maxes.setdefault(eles[0]+', '+eles[1]+',',[]).append(
            tuple([float(eles[2]),int(eles[3]),int(eles[4])]))

for key in maxes.keys():
    # Since you have a list of tuples, sort them to your choosing here
    maxes[key]=sorted(maxes[key],key=lambda t: t[2]+t[1], reverse=True)

for key in sorted(maxes.keys()):
    print key,'{:8}, {:6}, {:6}'.format(*maxes[key][0])
    print key,'{:8}, {:6}, {:6}'.format(*maxes[key][1])

输出:

Accnt-01, A,  11.1399,    312,   1861
Accnt-01, A,  13.3161,    205,   1095
Accnt-01, B,  19.1451,   2180,  15194
Accnt-01, B,  15.0259,    298,   2139
Accnt-02, A,  20.3109,    423,   2947
Accnt-02, A,  15.0259,    298,   2139
Accnt-02, B,  20.3109,    423,   2947
Accnt-02, B,  15.0259,    298,   2139
于 2012-10-03T16:53:24.480 回答