私はこのCSVテーブルデータ処理
のようなテーブルを見て、私は、各郡のための最大パーセンテージスコアをフィールドを追加する必要があります。たとえば99.03833の場合、Anderson Countyの最大得点はHAZ_7です。最初の行はスコアを表します。各行の数字はスコアのパーセンテージを表します。私は各郡の大半の得点が必要です。
エクセルまたはパイソンのいずれの方法でも、どのようにそれを行うことができますか?
私はこのCSVテーブルデータ処理
のようなテーブルを見て、私は、各郡のための最大パーセンテージスコアをフィールドを追加する必要があります。たとえば99.03833の場合、Anderson Countyの最大得点はHAZ_7です。最初の行はスコアを表します。各行の数字はスコアのパーセンテージを表します。私は各郡の大半の得点が必要です。
エクセルまたはパイソンのいずれの方法でも、どのようにそれを行うことができますか?
ここでは、Pythonで行う方法について説明します。
import csv
filename = 'county_data.csv'
output_filename = 'county_data2.csv'
def maxelements(names, seq):
""" Return corresponding names of the position(s) of the largest element in sequence. """
max_value = max(seq)
return [names[i] for i, v in enumerate(seq) if v == max_value]
with open(filename, 'r') as infile, open(output_filename, 'w') as outfile:
reader = csv.reader(infile)
writer = csv.writer(outfile)
fieldnames = next(reader) # assume first row contains field names
writer.writerow(fieldnames + ['Max']) # plus name of new field
haz_fields = fieldnames[2:]
for row in reader:
row = row[:2] + [float(elem) for elem in row[2:]] # convert haz fields to numbers
maxfields = maxelements(haz_fields, row[2:])
writer.writerow(row + maxfields)
ここでファイルCVS小さなサンプル入力です:
County,FIPS,%HAZ_1,%HAZ_2,%HAZ_3,%HAZ_4,%HAZ_5,%HAZ_6,%HAZ_7,%HAZ_8,%HAZ_9,%HAZ_10,Max
Anderson County,48001,0.0,0.0,0.0,0.0,0.0,0.0,99.03833,0.961668,0.0,0.0,%HAZ_7
Andrews County,48003,0.0,0.0,0.0,0.0,0.0,0.0,26.08,73.92,0.0,0.0,%HAZ_8
Angelina County,48005,0.0,0.0,0.0,0.0,0.0,62.41924,37.58076,0.0,0.0,0.0,%HAZ_6
Aransas County,48007,0.0,0.0,100.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,%HAZ_3
注:maxelements()
機能があるため、リストを返す
County,FIPS,%HAZ_1,%HAZ_2,%HAZ_3,%HAZ_4,%HAZ_5,%HAZ_6,%HAZ_7,%HAZ_8,%HAZ_9,%HAZ_10
Anderson County,48001,0,0,0,0,0,0,99.03833,0.961668,0,0
Andrews County,48003,0,0,0,0,0,0,26.08,73.92,0,0
Angelina County,48005,0,0,0,0,0,62.41924,37.58076,0,0,0
Aransas County,48007,0,0,100,0,0,0,0,0,0,0
そしてここでは、出力ファイルに書かれたものです同じ最大値を持つ2つ以上のフィールドがある可能性があります(ただし、サンプル入力)。このような状況で何が起こりたいのかを記述していないため、コードは必ずしもこのケースを適切に処理するとは限りません。
それそれは問題ではないのです、あなたは次のバージョンの使用することができ、それを、基本的に、単純に最初のインデックスを返しワンライナー-こと:
def maxelements(names, seq):
""" Return corresponding names of the position(s) of the largest element in sequence. """
return [names[seq.index(max(seq))]]
だから、あなたはテキスト '%のHAZ_7'が必要その行の新しい列?そして、各行の最大値の列タイトル? – Kyle
はい。私は各行の最大パーセンテージのためのスコアが必要です – alice
だから、いいえ?あなたは '99.03833'を新しい列に表示したいと言っていますか? – Kyle