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

如何对多列one-hot编码DataFrame应用melt/wide_to_long转换?

解决方案

方法一:使用melt函数(通用型)

先通过melt将宽表转换为长格式,再过滤掉值为0的无效行,最终得到目标结构:

import pandas as pd

# 假设你的原始DataFrame名为df
# 1. 转换为长格式,保留review_score作为标识列
melted_df = df.melt(
    id_vars='review_score',  # 保持不变的列
    var_name='Genre',        # 原genre列名转为新列的名称
    value_name='is_genre'    # 原genre列的0/1值存入该列
)

# 2. 只保留genre标记为1的有效行,删除多余列
result_df = melted_df[melted_df['is_genre'] == 1].drop('is_genre', axis=1)

# 3. 重置索引(可选,让结果更整洁)
result_df = result_df.reset_index(drop=True)

方法二:使用idxmax函数(简洁型)

由于你的数据是严格的one-hot编码(每行仅一个genre标记为1),可以直接提取每行值为1的列名作为genre:

import pandas as pd

# 假设你的原始DataFrame名为df
# 1. 自动识别所有genre列(排除review_score)
genre_cols = df.columns.drop('review_score')

# 2. 获取每行中值为1的genre列名
df['Genre'] = df[genre_cols].idxmax(axis=1)

# 3. 保留需要的两列,得到目标结构
result_df = df[['Genre', 'review_score']]

两种方法最终都会生成你需要的DataFrame,直接用result_df即可绘制箱线图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:05:23