如何对多列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
相关产品推荐
相关产品推荐

