我有一个数据集,其中包含我的一些实验的一些实验数据表。我有一个包含 5 列和 100 行的数组。其中 4 列包含浮点数,其余一列表示第 4 列包含一些反应物/化学物质的名称(即字符串)。可能会发生一个名称在其他行中有许多重复项的情况。我想制作一个像字典一样的向量,就像说{'name1':0, 'name2':1,...}。不会在此向量中添加重复的字符串。我搜索了过去的问题,但我无法解决问题。
样本数据:(仅提供部分数据来自庞大的母数据)
Id,R1Test,R2Test,P1Test,Reactant,CC
0,1.2,3.2,5.2,Contra+1a,3.0
1,3.4,0.1,8.9,Sepi+1a,4.3
2,2.3,3.8,8.9,Sepi+1a,2.1
3,1.2,3.4,6.0,Drav2,1.2
4,-2.1,-1.0,9.8,Contra-1a,77.0
5,7.0,0.2,0.3,Contra+1a,2.5
有把柄吗?
提前谢谢。
我想你问的是dict(名称:第一次出现的索引)。如果是这样的话,以下是您可以使用的内容:
>>> import pandas as pd
>>> namesCol = pd.Series(list('abac'))
>>> namesCol
0 a
1 b
2 a
3 c
dtype: object
所需的字典将是
corresp = dict(a = 0, b = 1, c = 3)
获取唯一名称:
>>> names = namesCol.unique()
>>> names
array(['a', 'b', 'c'], dtype=object)
现在找到每个名称的第一个匹配项:
>>> corresp = {name: namesCol[namesCol == name].index[0] for name in names}
>>> corresp
{'a': 0, 'c': 3, 'b': 1}
labels, uniques = pd.vectorize(s['Reactant'])
这将返回您拥有的唯一值和该列的标签...
如果您只需要一本字典而不是替换它们或您要求的任何内容,您可以执行以下操作:
dictionary = {value: i for i, value in enumerate(s['Reactant'].unique())}
循环遍历唯一值并为每个值分配一个整数。