如果术语在中,则生成真/假列

2024-04-24 14:50:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列,列中的值以字符串形式列出,用“;”分隔,我想为每个单独的值生成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,它的速度就慢了。非常感谢您的帮助!你知道吗


Tags: 数据nameinfalsetruefordatacol
1条回答
网友
1楼 · 发布于 2024-04-24 14:50:40

尝试使用^{}^{}

# Setup
df = pd.DataFrame({'id': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6}, 'likes colour': {0: 'blue', 1: 'blue; green; red', 2: 'red; purple', 3: 'purple; blue', 4: 'yellow; red', 5: 'yellow'}})

df.join(df['likes colour'].str.get_dummies(sep='; ').astype(bool))

[输出]

   id      likes colour   blue  green  purple    red  yellow
0   1              blue   True  False   False  False   False
1   2  blue; green; red   True   True   False   True   False
2   3       red; purple  False  False    True   True   False
3   4      purple; blue   True  False    True  False   False
4   5       yellow; red  False  False   False   True    True
5   6            yellow  False  False   False  False    True

相关问题 更多 >