我有一个csv文件,它有一个primary\u id字段和一个version字段,如下所示: 你知道吗
ful_id version xs at_grade date
000c1a6c-1f1c-45a6-a70d-f3555f7dd980 3 123 yes 20171003
000c1a6c-1f1c-45a6-a70d-f3555f7dd980 1 12 no 20170206
034c1a6c-4f1c-aa36-a70d-f2245f7rr342 1 334 yes 20150302
00dc5fec-ddb8-45fa-9c86-77e09ff590a9 1 556 yes 20170201
000c1a6c-1f1c-45a6-a70d-f3555f7dd980 2 123 no 20170206
编辑这是实际数据的样子,再添加106列数据和20000条记录
较大的版本号是该记录的最新版本。我很难思考根据版本获取最新记录并将其转储到词典中的逻辑。我正在将csv中的信息拉到一个空白列表中,但如果有人能给我一些关于未来逻辑的指导,我将不胜感激
import csv
from collections import defaultdict
reader = csv.DictReader(open('rpm_inv.csv', 'rb'))
allData = list(reader)
dict_list = []
for line in allData:
dict_list.append(line)
pprint.pprint(dict_list)
不需要任何花哨的东西。你知道吗
defaultdict
包含在Python的标准库中。这是一本改进过的词典。我在这里使用它是因为它避免了在字典中初始化条目的需要。这意味着我可以写,例如result[id] = max(result[id], version)
。如果id
没有条目,那么defaultdict
创建一个条目并将version
放入其中(因为很明显这将是最大值)。你知道吗map
将int
函数应用于生成的每个字符串。你知道吗ignore
。你知道吗编辑:有这么多的数据,在我看来,更好地处理熊猫就成了另一个问题。你知道吗
我把
df.groupby(['ful_id']).version.idxmax()
位放进去演示我所做的事情。我在ful_id
上分组,然后请求version
的最大值和最大值的索引,所有这些都在一个步骤中使用idxmax
。尽管pandas将其显示为一个两列表,但结果实际上是一个整数列表,我可以使用它从dataframe中选择行。你知道吗我就是这么处理
df.iloc[df.groupby(['ful_id']).version.idxmax(),:]
。这里,df.groupby(['ful_id']).version.idxmax()
部分标识行,:
部分标识列,即所有列。你知道吗谢谢你提出一个有趣的问题!你知道吗
我不太确定您希望输出是什么样子,但这至少可以为您指明正确的方向,只要您不反对
pandas
。你知道吗相关问题 更多 >
编程相关推荐