<p>你说:</p>
<blockquote>
<p>I want time Time(s) to be sorted in chronological order from 0 ->
highest number and at each respective time, the corresponding
absorbance reading to be added to the respective column (with the
header).</p>
</blockquote>
<p>查看您最初发布的完整数据(在被编辑截短之前),您将无法根据<code>Meas. Time [s]</code>列匹配abs读数,因为A05、A01和B01的每个读数都不相同。相反,(我想?)<code>Reading</code>数字列是连接各个读数的方法,因为<code>Meas. Time [s]</code>对于所有井的每个读数编号都是相似的。在</p>
<p>因此,使用Python <a href="https://docs.python.org/2/library/csv.html#module-csv" rel="nofollow">csv</a>模块,读取文件并按<code>Reading</code>列对数据进行分组。然后按顺序迭代分组读数,为每个<code>Well</code>获取<code>Abs</code>的值。分组是使用dicts的<a href="https://docs.python.org/2/library/collections.html#collections.defaultdict" rel="nofollow">^{<cd7>}</a>完成的。在</p>
<pre><code>import csv
from collections import defaultdict
# CSV column numbers
WELL_COL = 1
READING_COL = 6
ABS_COL = 7
with open('readings') as infile:
data = defaultdict(dict)
reader = csv.reader(infile, delimiter='\t')
_ = next(reader) # skip the header line
for row in reader:
data[int(row[READING_COL])][row[WELL_COL]] = row[ABS_COL]
outfile_fmt = '{:<10}{:<10}{:<10}{}\n' # N.B. new line suitable for file.write(), not print()
with open('abs_readings', 'w') as outfile:
outfile.write(outfile_fmt.format('', 'A05', 'A01', 'B01'))
outfile.write(outfile_fmt.format('Reading', 'Abs', 'Abs', 'Abs'))
for reading, abs in sorted(data.items()):
outfile.write(outfile_fmt.format(reading, abs['A05'], abs['A01'], abs['B01']))
</code></pre>
<p>从CSV文件中读取数据后,<code>data</code>如下所示:</p>
^{pr2}$
<p>最后,遍历字典(按读数排序)并输出abs值。最终输出应如下所示:</p>
<pre>
A05 A01 B01
Reading Abs Abs Abs
1 0.113 0.706 0.698
2 0.114 0.706 0.698
3 0.114 0.705 0.698
4 0.114 0.705 0.698
5 0.114 0.705 0.698
6 0.114 0.705 0.698
7 0.114 0.704 0.697
8 0.114 0.703 0.697
9 0.114 0.703 0.696
10 0.114 0.702 0.696
11 0.114 0.702 0.696
.
.
.
59 0.114 0.684 0.679
60 0.114 0.683 0.678
</pre>