<p>不需要任何花哨的东西。你知道吗</p>
<ul>
<li><code>defaultdict</code>包含在Python的标准库中。这是一本改进过的词典。我在这里使用它是因为它避免了在字典中初始化条目的需要。这意味着我可以写,例如<code>result[id] = max(result[id], version)</code>。如果<code>id</code>没有条目,那么<code>defaultdict</code>创建一个条目并将<code>version</code>放入其中(因为很明显这将是最大值)。你知道吗</li>
<li>我阅读输入文件中的行,一次一行,丢弃结束行和空格,拆分逗号,然后使用<code>map</code>将<code>int</code>函数应用于生成的每个字符串。你知道吗</li>
<li>我忽略了文件中的第一行,只是读取它并将其内容分配给我任意调用的变量<code>ignore</code>。你知道吗</li>
<li>最后,为了使结果更容易理解,我对字典中的键进行排序,并按顺序显示它的内容。你知道吗</li>
</ul>
<hr/>
<pre><code>>>> from collections import defaultdict
>>> result = defaultdict(int)
>>> with open('to_dict.txt') as input:
... ignore = input.readline()
... for line in input:
... id, version = map(int, line.strip().replace(' ', '').split(','))
... result[id] = max(result[id], version)
...
>>> ids = list(result.keys())
>>> ids.sort()
>>> for id in ids:
... id, result[id]
...
(3, 1)
(11, 3)
(20, 2)
(400, 2)
</code></pre>
<p><strong>编辑</strong>:有这么多的数据,在我看来,更好地处理熊猫就成了另一个问题。你知道吗</p>
<p>我把<code>df.groupby(['ful_id']).version.idxmax()</code>位放进去演示我所做的事情。我在<code>ful_id</code>上分组,然后请求<code>version</code>的最大值和最大值的索引,所有这些都在一个步骤中使用<code>idxmax</code>。尽管pandas将其显示为一个两列表,但结果实际上是一个整数列表,我可以使用它从dataframe中选择行。你知道吗</p>
<p>我就是这么处理<code>df.iloc[df.groupby(['ful_id']).version.idxmax(),:]</code>。这里,<code>df.groupby(['ful_id']).version.idxmax()</code>部分标识行,<code>:</code>部分标识列,即所有列。你知道吗</p>
<p>谢谢你提出一个有趣的问题!你知道吗</p>
<pre><code>>>> import pandas as pd
>>> df = pd.read_csv('different.csv', sep='\s+')
>>> df
ful_id version xs at_grade date
0 000c1a6c-1f1c-45a6-a70d-f3555f7dd980 3 123 yes 20171003
1 000c1a6c-1f1c-45a6-a70d-f3555f7dd980 1 12 no 20170206
2 034c1a6c-4f1c-aa36-a70d-f2245f7rr342 1 334 yes 20150302
3 00dc5fec-ddb8-45fa-9c86-77e09ff590a9 1 556 yes 20170201
4 000c1a6c-1f1c-45a6-a70d-f3555f7dd980 2 123 no 20170206
>>> df.groupby(['ful_id']).version.idxmax()
ful_id
000c1a6c-1f1c-45a6-a70d-f3555f7dd980 0
00dc5fec-ddb8-45fa-9c86-77e09ff590a9 3
034c1a6c-4f1c-aa36-a70d-f2245f7rr342 2
Name: version, dtype: int64
>>> new_df = df.iloc[df.groupby(['ful_id']).version.idxmax(),:]
>>> new_df
ful_id version xs at_grade date
0 000c1a6c-1f1c-45a6-a70d-f3555f7dd980 3 123 yes 20171003
3 00dc5fec-ddb8-45fa-9c86-77e09ff590a9 1 556 yes 20170201
2 034c1a6c-4f1c-aa36-a70d-f2245f7rr342 1 334 yes 20150302
</code></pre>