0

わかりました、これを行うための最良の方法が何であるかを自分自身に教えようとした後、私はこの特定の答えを探しました。私はPythonを初めて使用し、誰かが私を助けるための簡単な方法を知っていることを望んでいました!入力データファイルの例を次に示します。

Lat、Long、Var、Id、Date Time
47.022、-104.330,10、MBVR、12/12/20 06:36:00
47.022、-104.330,11、MBVR、12/12/20 06:26:00
48.810、 -104.253,10、MCOM、12/12/20 06:41:00
48.810、-104.253,13、MCOM、12/12/20 06:38:00
48.810、-104.253,12、MCOM、12/12/20 06:48:00
47.022、-104.330,11、MBVR、12/12/20 05:17:00
47.022、-104.330,10、MBVR、12/12/20 05:34:00
47.022、-104.330,12、 MBVR、12/12/20 05:24:00

ファイルにはさまざまなIDを含めることができますが、これは単なるサンプルです。データを取り込んで分離し、出力ファイルを書き込むプログラムを停止しました。これが私のコードの一部です:

csv_max = 'X:\\csv\\lsrwnd.dat'
my_file = open(csv_max, "rb")
rowadd = my_file.next()
for line in my_file:
    items = line.split(",")
    coords = items[0:2]
    wind = items[2]
    station = items[3]
    timestamp = items[4]

それで、これがこの時点からの私の問題です。私がする必要があるのは、「id」列の最大値だけの出力ファイルを作成することです。したがって、「ステーション」が繰り返される場合は、そのステーションが出現するたびに実行し、最大の「id」を見つけて、それぞれの「ステーション」の「id」の最大値の行のみを返すプログラムが必要です。上記のデータ例から、私が欲しいのは次のとおりです。

48.810、-104.253,13、MCOM、12/12/20 06:38:00
47.022、-104.330,12、MBVR、12/12/20 05:24:00

残りは捨てることができます。MCOMの場合、最大IDは13で、MBVRの場合、最大は12です。したがって、50の異なるステーションがある場合、50の回線のみを返す必要があり、返された50のそれぞれがそのステーションの最大「ID」になります。出力ファイルを作成することはできますが、各ステーションおよびその他の要素の最大IDデータを取得するにはどうすればよいですか?辞書を使ってみましたが、最大値のキーとステーション名だけでなく、行全体を返す方法がわかりません。「日時」変数は重要ではありません(最新または最初の出現が必要であるという点で)。よろしくお願いします!

4

2 に答える 2

1
import csv
d = {}
with open('input.csv', 'r') as f:
    csvr = csv.DictReader(f)
    for rec in csvr:
        if rec['Id'] not in d or int(rec['Var']) > int(d[rec['Id']]['Var']):
            d[rec['Id']] = rec
with open('output.csv', 'w') as f:
    csvw = csv.DictWriter(f, fieldnames=csvr.fieldnames)
    csvw.writeheader()
    csvw.writerows(d.itervalues())

output.csv ファイルは次のようになります。

Lat,Long,Var,Id,Date Time
48.810,-104.253,13,MCOM,12/12/20 06:38:00
47.022,-104.330,12,MBVR,12/12/20 05:24:00
于 2012-12-20T09:21:36.420 に答える
0

ラインを繰り返し処理しているとき、max_stations という名前のディクショナリに最大 ID 値を保存します。

csv_max = 'X:\\csv\\lsrwnd.dat'
my_file = open(csv_max, "rb")
rowadd = my_file.next()
max_stations = {}
for line in my_file:
    items = line.split(",")
    coords = items[0:2]
    wind = items[2]
    station = items[3]

    try:
        current_wind = max_stations[station]
    except IndexError:
        current_wind = wind
    max_wind = wind if wind >= current_wind else current_wind  

    max_stations[station] = max_wind
    timestamp = items[4]
于 2012-12-20T09:26:08.767 に答える