<p>在字典中存储一组<a href="http://docs.python.org/2/library/itertools.html#itertools.count" rel="nofollow">^{<cd1>} iterables</a>,以便为每个唯一的列值保留一个计数器。如果使用<a href="http://docs.python.org/2/library/collections.html#collections.defaultdict" rel="nofollow">^{<cd2>}</a>,则每当遇到新的唯一值时,可以自动将计数从1开始。你知道吗</p>
<p>您的数据已排序,因此只需替换第10列:</p>
<pre><code>import csv
from itertools import count
from collections import defaultdict
from functools import partial
counts = defaultdict(partial(count, 1)) # create a new count starting at 1
with open(output_csv_filename, 'wb') as outfile:
writer = csv.writer(outfile)
for row in your_list_of_rows:
row[9] = next(counts[row[2]]) # get the next count value
writer.writerow(row)
</code></pre>
<p>就这样。<code>row[9]</code>是第10列;对于在<code>row[2]</code>(第3列)中找到的每个唯一值,它将由从1开始的数字填充。你知道吗</p>
<p>计数器字典的快速演示:</p>
<pre><code>>>> from itertools import count
>>> from collections import defaultdict
>>> from functools import partial
>>> counts = defaultdict(partial(count, 1))
>>> next(counts['foo'])
1
>>> next(counts['foo'])
2
>>> next(counts['bar'])
1
>>> next(counts['foo'])
3
</code></pre>
<p>在示例数据集上运行上述代码将导致:</p>
<pre><code>1-20,data1,Unique data1,4,data2,14,data3.65,data4,data5,1,141.85,data data data
1-20,data1,Unique data1,4,data2,14,data3.65,data4,data5,2,140.81,data data data
1-20,data1,Unique data1,4,data2,14,data3.65,data4,data5,3,131.86,data data data
1-30,data1,Unique data2,4,data2,12,data3.30,data4,data5,1,163.85,data data data
1-30,data1,Unique data2,4,data2,12,data3.30,data4,data5,2,162.93,data data data
1-30,data1,Unique data2,4,data2,12,data3.30,data4,data5,3,161.23,data data data
1-30,data1,Unique data2,4,data2,12,data3.30,data4,data5,4,159.83,data data data
1-30,data1,Unique data2,4,data2,12,data3.30,data4,data5,5,156.71,data data data
1-30,data1,Unique data2,4,data2,12,data3.30,data4,data5,6,154.96,data data data
1-30,data1,Unique data2,4,data2,12,data3.30,data4,data5,7,147.96,data data data
1-30,data1,Unique data2,4,data2,12,data3.30,data4,data5,8,140.09,data data data
1-50,data1,Unique data3,2,data2,16,data3.00,data4,data5,1,169.5,data data data
1-50,data1,Unique data3,2,data2,16,data3.00,data4,data5,2,165.2,data data data
1-50,data1,Unique data3,2,data2,16,data3.00,data4,data5,3,165.1,data data data
1-50,data1,Unique data3,2,data2,16,data3.00,data4,data5,4,159.8,data data data
</code></pre>