如何将数据框行标签转为列并聚合以适配多标签分类?
解决多标签分类数据格式转换的方法
这里给你两个简单可行的方案,都是基于Pandas的常规操作:
方案一:get_dummies + groupby聚合
先把Label列转成独热编码,再按Key、Name、Description分组取最大值(同一组内只要出现过该标签就保留1,没出现就是0):
import pandas as pd # 构造示例数据(对应你提供的原始DataFrame) df = pd.DataFrame({ 'Key': [1,1,2,3], 'Name': ['Self service', 'Self service', 'Multi cloud', 'Storage issues'], 'Description': ['We want self service.', 'We want self service.', 'Mutli cloud is needed.', 'Storage upgrade.'], 'Label': ['Performance', 'Storage', 'Scaling', 'Storage'] }) # 生成标签列的独热编码 dummies = pd.get_dummies(df['Label']) # 合并原数据与独热编码列 df_combined = pd.concat([df, dummies], axis=1) # 分组聚合,取最大值确保同一Key组内标签值为1或0 result = df_combined.groupby(['Key', 'Name', 'Description']).max().reset_index() print(result)
方案二:pivot_table直接转换
用透视表功能,指定分组索引和标签列,填充空值为0后整理格式:
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'Key': [1,1,2,3], 'Name': ['Self service', 'Self service', 'Multi cloud', 'Storage issues'], 'Description': ['We want self service.', 'We want self service.', 'Mutli cloud is needed.', 'Storage upgrade.'], 'Label': ['Performance', 'Storage', 'Scaling', 'Storage'] }) # 生成透视表,aggfunc用count或max均可,fill_value填充空值为0 result = df.pivot_table( index=['Key', 'Name', 'Description'], columns='Label', values='Label', aggfunc='count', fill_value=0 ).reset_index() # 移除列名的层级标签,匹配目标格式 result.columns.name = None print(result)
两种方法都能得到你需要的格式,核心是确保同一Key对应的Name、Description是唯一值,这样分组或透视后不会出现重复行。
内容的提问来源于stack exchange,提问作者ayukum
相关产品推荐
相关产品推荐

