2017-03-15 14 views
0

パートナー、プレイス、値の3つの列で構成されるCSVファイルがあります。リスト(UNIQ)私は、各パートナーの合計値を見つけたいリストを反復してcsvファイルと比較する - python

ので、私は独自のパートナー名のリストに、このデータをソート列パートナーで重複があります。私。一意のパートナーのリストからbobを取り出し、csvファイルに行き、bobに関連付けられたすべての値を見つけてそれらを一緒に追加します。

次にBobという名前と合計値を取って辞書に追加します。

リスト内のすべての名前について、このプロセスを繰り返します。

これまでの私のコードはこれです:

PVAL = {'partner':0, 'value':0} 

with open('/Users/tb/Desktop/data.csv', 'r') as f: 
    EXP = csv.reader(f) 
    for j in range(len(list(UNIQ))): 
     P1 = list(UNIQ)[j] 
     for row in EXP: 
      if row[0] == P1: 
       PVAL.update({'partner': row[0], 'value': row[2]}) 
print PVAL 

これが返されます:{ 'パートナー': '1551e96b8234'、 '値': '0.00541867434354'}

0.00541867434354はちょうどのための多くの値のいずれかでありますパートナー '1551e96b8234'の場合

私はsum関数を使用する必要があると知っていますが、私はそれを解読できません。 英語では、コードは "csvファイル内のbobのすべてのインスタンスについて、関連するすべての値を合計し、それらをbobs名付きの辞書に追加する必要があります。"

代わりにストレートの辞書を使用してのおかげ

+3

サンプルのCSVファイルを提供できますか? –

+0

各列には数千のデータポイントが含まれています。パートナーとプレイスは以下のように書かれています:algkjlg8slkg099数字と文字の混在。値は浮動小数点数です0.004626 – John

+1

6個の並んだサンプルのCSVを提供するのは本当に簡単でしょう。質問に答える人々がそれらをテストすることを好むと考えてください。つまり、ファイルを生成する必要があります。私たちがやるべきことを減らし、答えをよりよく比較するための例があれば、誰にとっても簡単です。 – tdelaney

答えて

0

は、あなたが.update()を呼び出したときに自動的にあなたのための追加を行いますされ、Counterを使用します。

from collections import Counter 
PVAL = Counter() 

PVAL.update({'partner': 1}) 
PVAL.update({'partner': 2.5}) 

# PVAL is now {'partner': 3.5} 
2

私はこれが何をしたいと思います。ただ、関連する値の合計にパートナーをマッピングする辞書を構築する:

from collections import defaultdict 
totals = defaultdict(float) 

with open('/Users/tb/Desktop/data.csv', 'r') as f: 
    EXP = csv.reader(f) 
    for row in EXP: 
     totals[row[0]] += float(row[2]) 
print totals 

ヘッダ行がある場合は、あなただけのforループの前にnext(EXP)でそれをスキップすることができます。

from collections import defaultdict 
totals = defaultdict(float) 

with open('/Users/tb/Desktop/data.csv', 'r') as f: 
    EXP = csv.reader(f) 
    headers = next(EXP) 
    for row in EXP: 
     totals[row[0]] += float(row[2]) 
print totals 
+0

これは私に与えます:トレースバック(最新の最後の呼び出し): ファイル "/Users/tb/Desktop/title.py"、行35、 合計[行[0]] + =浮動小数点(行[2]) – John

+0

トレースバックからのエラーメッセージを含めると役立つでしょうが、少なくともあなたの '値'列の数字は数字ではありません。 – Duncan

+0

たぶんそれはタイトルを含んでいるかもしれません。明らかに文字列です:O – John

関連する問題