我有一个列,列中的值以字符串形式列出,用“;”分隔,我想为每个单独的值生成true/false列。数据帧很大(10万行,13个值),我当前的代码在该数据帧中每秒大约有1.5行。是否有专门的熊猫功能可以更快地做到这一点?或者是我犯了一个明显的错误,让我的代码无法运行?你知道吗
数据如下:
id likes colour
0 1 blue
1 2 blue; green; red
2 3 red; purple
3 4 purple; blue
4 5 yellow; red
5 6 yellow
输出为:
id likes colour red yellow blue purple green
0 1 blue False False True False False
1 2 blue; green; red True False True False True
2 3 red; purple True False False True False
3 4 purple; blue False False True True False
4 5 yellow; red True True False False False
5 6 yellow False True False False False
从第一帧到第二帧的当前函数:
def do_thing(data, col_name = 'likes colour'):
cols = list(set([j for i in list(data[col_name]) for j in i.split('; ')]))
for i in cols:
data[i] = None
for i in data.index:
for j in cols:
if j in data.loc[i, col_name]:
data.loc[i, j] = True
else:
data.loc[i, j] = False
return data
基本上,这首先标识每个不同的值,然后为每个值创建空列,最后用True或False填充这些值,无论给定的单词是否存在。你知道吗
对于示例数据帧来说,这很好,但是一旦我再添加一些颜色并乘以10000,它的速度就慢了。非常感谢您的帮助!你知道吗
尝试使用^{} 和^{} :
[输出]
相关问题 更多 >
编程相关推荐