Чистое решение Python, которое может работать с любым количеством файлов (оно будет добавлять новый столбец для каждого файла и сортировать по количеству файлов с одинаковым значением первого столбца). В качестве бонуса, он на самом деле использует правильный анализ CSV, поэтому он может обрабатывать несколько форматов CSV практически без изменений:
import csv
files = ["1.csv", "2.csv"] # as many files as you want
results = [] # a store for our final result
line_map = {} # store a map for a quick update lookup
for i, f in enumerate(files): # enumerate the file list and iterate over it
with open(f, newline="") as f_in: # open(f, "rb") on Python 2.x
reader = csv.reader(f_in, delimiter=" ") # proper CSV reader, assumed space delimiter
for row in reader: # iterate over the current CSV line by line
row_id = row[0] # extract the first column for easier access
if row_id not in line_map: # a column value encountered for the first time...
line_map[row_id] = [row_id] + ["-"] * len(files) # create a placeholder list
results.append(line_map[row_id]) # add the value on its own column
line_map[row[0]][i+1] = row[1] # save the value in its place in the results list
# now we need to bracket the results in order of number of values before writing
# the easiest way is to just sort based on the amount of blank spaces
results = sorted(results, key=lambda x: x.count("-"))
Теперь, если вы просто хотите напечатать это:
for r in results:
print("\t".join(r))
# C2-C1 1.5183 1.5052
# C3-C2 1.49 1.505
# C3-C1 1.4991 1.5037
# C1-C2-C3 59.78 59.95
# O4-C3 1.4104 -
# S4-C3 - 1.7976
Или, если вы действительно хотите сохранить его в правильно отформатированном файле CSV:
with open("output.csv", "w", newline="") as f: # open(f, "wb") on Python 2.x
writer = csv.writer(f, delimiter="\t") # a proper CSV writer, tab used as a delimiter
writer.writerows(results)