You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

新手求助:如何为cluster_ids列唯一值生成对应0-1标识列

解决方法

你的问题出在get_y_value函数上——它硬编码了只判断cluster_ids是否等于0,不管循环里的j是哪个唯一值,所以每次生成的新列都是同一套结果。下面给你两种修改方案:

方案一:修改函数适配循环中的目标值

先把函数改成可以接收目标cluster_id参数的形式,然后在循环里把当前的j传进去:

# 修改后的函数
def get_y_value(cluster_id, target_id):
    return 1 if cluster_id == target_id else 0

# 循环创建列
iterator = 0
for j in df['cluster_ids'].unique():
    col_name = f'Clid_{iterator}'
    # 使用lambda把当前j传给函数
    df_xyz[col_name] = df['cluster_ids'].apply(lambda x: get_y_value(x, j))
    iterator += 1

更简洁的写法可以不用单独定义函数,直接在循环里用pandas的比较方法:

iterator = 0
for j in df['cluster_ids'].unique():
    col_name = f'Clid_{iterator}'
    # eq(j)判断是否等于j,astype(int)把布尔值转成1/0
    df_xyz[col_name] = df['cluster_ids'].eq(j).astype(int)
    iterator += 1

方案二:用pandas内置方法一键生成(推荐)

pandas有专门处理这种哑变量的函数pd.get_dummies,不用写循环和函数,一行代码就能搞定所有需求:

import pandas as pd

# 生成哑变量列,前缀设为Clid
dummies = pd.get_dummies(df['cluster_ids'], prefix='Clid')
# 把生成的列合并到原DataFrame
df_xyz = pd.concat([df_xyz, dummies], axis=1)

这个方法会自动为每个唯一的cluster_id创建列,列名格式是Clid_<cluster_id值>,对应行取值1,其余行取值0,比手动写循环高效得多,也更不容易出错。

内容的提问来源于stack exchange,提问作者Deepika Chandrasekar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 19:52:18