我有一个字符串列表.我想为每个字符串分配一个唯一的编号(确切的数字并不重要),并按顺序使用这些编号创建一个相同长度的列表.以下是我最好的尝试,但我不满意有两个原因:
它假设相同的值彼此相邻
我必须用a开始列表0,否则输出将是不正确的
我的代码:
names = ['ll', 'll', 'll', 'hl', 'hl', 'hl', 'LL', 'LL', 'LL', 'HL', 'HL', 'HL']
numbers = [0]
num = 0
for item in range(len(names)):
if item == len(names) - 1:
break
elif names[item] == names[item+1]:
numbers.append(num)
else:
num = num + 1
numbers.append(num)
print(numbers)
Run Code Online (Sandbox Code Playgroud)
我想使代码更通用,因此它将使用未知列表.有任何想法吗?
definition
factorize:将每个唯一对象映射到一个唯一的整数.通常,映射到的整数范围是从零到n - 1,其中n是唯一对象的数量.两种变化也是典型的.类型1是编号以识别唯一对象的顺序发生的位置.类型2是首先对唯一对象进行排序的位置,然后应用与类型1中相同的过程.
安装程序
考虑元组列表tups
tups = [(1, 2), ('a', 'b'), (3, 4), ('c', 5), (6, 'd'), ('a', 'b'), (3, 4)]
Run Code Online (Sandbox Code Playgroud)
我想将其分解为
[0, 1, 2, 3, 4, 1, 2]
Run Code Online (Sandbox Code Playgroud)
我知道有很多方法可以做到这一点.但是,我希望尽可能高效地完成这项工作.
我试过的
pandas.factorize 并得到一个错误......
pd.factorize(tups)[0]
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-84-c84947ac948c> in <module>()
----> 1 pd.factorize(tups)[0]
//anaconda/envs/3.6/lib/python3.6/site-packages/pandas/core/algorithms.py in factorize(values, sort, order, na_sentinel, size_hint)
553 uniques = vec_klass()
554 check_nulls = not is_integer_dtype(original)
--> 555 labels = table.get_labels(values, uniques, 0, na_sentinel, check_nulls)
556
557 labels = _ensure_platform_int(labels)
pandas/_libs/hashtable_class_helper.pxi …Run Code Online (Sandbox Code Playgroud) 假设我有一个清单
l = ['michael','michael','alice','carter']
Run Code Online (Sandbox Code Playgroud)
我想将它映射到以下内容:
k = [1,1,2,3]
Run Code Online (Sandbox Code Playgroud)
其中michael对应于1,alice对应于2等.在Python中是否有一个函数可以轻松完成此操作?
Python 2.7,numpy,以一系列因子的形式创建级别.
我有一个列出自变量的数据文件,最后一列表示该类.例如:
2.34,4.23,0.001, ... ,56.44,2.0,"cloudy with a chance of rain"
Run Code Online (Sandbox Code Playgroud)
使用numpy,我将所有数字列读入矩阵,最后一列读入一个我称之为"类"的数组.实际上,我事先并不知道类名,所以我不想使用字典.我也不想使用熊猫.以下是问题的示例:
classes = ['a', 'b', 'c', 'c', 'b', 'a', 'a', 'd']
type (classes)
<type 'list'>
classes = numpy.array(classes)
type(classes)
<type 'numpy.ndarray'>
classes
array(['a', 'b', 'c', 'c', 'b', 'a', 'a', 'd'],
dtype='|S1')
# requirements call for a list like this:
# [0, 1, 2, 2, 1, 0, 3]
Run Code Online (Sandbox Code Playgroud)
请注意,目标类可能非常稀疏,例如,"z",可能是100,000个案例中的1个.另请注意,类可以是任意文本字符串,例如科学名称.
我正在使用Python 2.7和numpy,我一直坚持我的环境.此外,数据已经过预处理,因此它被缩放并且所有值都有效 - 我不希望在处理数据之前第二次预处理数据以提取唯一类并构建字典.我真正想要的是相当于stringAsFactorsR中参数的Python,它在脚本读取数据时自动将字符串向量转换为因子向量.
不要问我为什么我使用的是Python而不是R - 我按照我所说的去做.
谢谢,CC.