想要在数据框中找到每个唯一字符串的第一个实例。然后创建一个列表,将其标记为是否是第一个唯一实例

时间:2019-07-11 13:18:30

标签: python pandas numpy

要改写它,我正在生成一些虚拟数据。假设有一个客户列表(有些有多个交易),我想标记每个唯一客户。然后,我将生成相关的个人信息,例如性别,客户ID等。

我的步骤是:   1)创建所有唯一名称的列表   2)遍历我的数据框中的“名称”列   3)当“唯一名称”列表中的值与DataFrame“名称”匹配时,将1附加到列表中(然后从“唯一名称”列表中删除该名称,因此为该名称的每个后续实例创建一个0)。或者如果不匹配则保留0。

我尝试了几种方法,但是似乎都没有用,这似乎是最接近的方法,但是我找不到答案。

首先是DataFrame

customers = [ ('jack', 34), 
             ('tom', 30),
             ('jack', 31),
             ('jack', 32),
             ('jon', 16),
             ('tim', 17)  ]

创建一个DataFrame对象

df = pd.DataFrame(customers, columns = ['Name' , 'Age'])

1)创建唯一名称列表

uniques = df.Name.unique().tolist()
uniques

2)

worklist = []

for i in df:
    if df["Name"] == uniques[i]:
        worklist.append(i)
        uniques.remove(i)
    else:
        worklist.append(0)

print(worklist)
print(uniques)

最后,我应该有一个虚拟变量列表(1,0s) [1,1,0,0,1,1]   同样,“唯一名称”列表应该为空。

但是,我不断收到此错误。

TypeError: list indices must be integers or slices, not str

1 个答案:

答案 0 :(得分:0)

您遇到的错误是因为您没有循环您认为要循环的内容,因此在循环时实际上是循环了列名(“名称”和“年龄”),这意味着您要求{{1 }}和uniques["Name"]会引发错误,列表索引不是str。

您可以使用字典而不是uniques["Age"]变量的列表来执行某种切换按钮:

uniques

尽管customers = [ ('jack', 34), ('tom', 30), ('jack', 31), ('jack', 32), ('jon', 16), ('tim', 17) ] df = pd.DataFrame(customers, columns = ['Name' , 'Age']) uniques = {name: True for name in df['Name']} worklist = [] for name in df["Name"]: if uniques[name]: worklist.append(1) uniques[name] = False else: worklist.append(0) print(worklist) 变量最后不是空的,但充满了全为“ False”的键,不确定其是否重要,如果可以告诉我,我将进行编辑。