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

最後の 2 つの値の意味がわからないので、2 つの値の合計を意味していると推測します。csvライブラリを使用して、データを行にプルします。ここで、各アカウントのリストがあると仮定して、この関数を使用して上位 2 つをプルします。

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 に答える