我正在尝试从数据集中的虚拟变量创建标签。我创建了一个“ Tags_col”列,每次嵌套的for循环遍历每一行时,如果某个类别的值为1,则希望该类别包含在每一行的tag_col的列表中。
像这样:
Dog Cat Rabbit Tags_col
0 1 1 ['Cat','Rabbit']
1 0 0 ['Dog']
到目前为止,我有这个:
for x in range(len(df)):
for col in df.columns:
if df.loc[x,col] == 1:
df.loc[x, "Tags_col"] = col
但是,这仅附加了for循环在Tags_col中找到的第一类。
谢谢。
将list comprehension与boolean一起使用,DataFrame
由compare by 1
和根据列名称创建的过滤器数组使用:
cols = df.columns.to_numpy()
df['Tags_col'] = [list(cols[x]) for x in df.eq(1).to_numpy()]
print (df)
Dog Cat Rabbit Tags_col
0 0 1 1 [Cat, Rabbit]
1 1 0 0 [Dog]
如果性能不重要,请使用DataFrame.apply
:
df['Tags_col'] = df.apply(lambda x: list(x.index[x==1]), axis=1)
print (df)
Dog Cat Rabbit Tags_col
0 0 1 1 [Cat, Rabbit]
1 1 0 0 [Dog]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句