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

如何创建多分类数据集?Python高效处理多标签重复输入DataFrame的优化方案

问题描述

我有如下所示的DataFrame:

df = pd.DataFrame(np.array([['I am a bear', 'Animal'], ['I am a bird', 'Bird'], ['I am a Bat', 'Animal'],['I am a Bat', 'Bird']]), columns=['Title', 'Task'])

对应的表格:

TitleTask
I am a bearAnimal
I am a birdBird
I am a BatAnimal
I am a BatBird

由于同一输入('I am a Bat')对应不同的类标签,这属于多标签任务。我目前的处理方式是对重复项进行分组,然后添加包含所有标签的新列,但该操作较为繁琐。请问是否存在更具Python风格(Pythonic)的实现方式?

预期输出:

TitleLabel1 (Animal)Label2 (Bird)
I am a bear10
I am a bird01
I am a Bat11

解决方案

嘿,这个需求完全不用手动折腾分组!用pandas的内置方法就能轻松实现,两种Pythonic的方式供你选择:

方法一:使用pivot_table

pivot_table可以直接帮你把Task列的不同值转成新列,同时用聚合函数标记是否存在该标签:

import pandas as pd
import numpy as np

# 原始DataFrame
df = pd.DataFrame(np.array([['I am a bear', 'Animal'], ['I am a bird', 'Bird'], ['I am a Bat', 'Animal'],['I am a Bat', 'Bird']]), columns=['Title', 'Task'])

# 生成透视表,aggfunc用lambda返回1表示存在该标签,fill_value填充0
result = df.pivot_table(index='Title', columns='Task', aggfunc=lambda x: 1, fill_value=0).reset_index()

# 重命名列名以匹配预期格式
result.columns = ['Title', 'Label1 (Animal)', 'Label2 (Bird)']

print(result)

方法二:get_dummies + groupby.max()

先对Task列做独热编码,再按Title分组取最大值(确保同一个Title的所有标签都被保留为1):

import pandas as pd
import numpy as np

df = pd.DataFrame(np.array([['I am a bear', 'Animal'], ['I am a bird', 'Bird'], ['I am a Bat', 'Animal'],['I am a Bat', 'Bird']]), columns=['Title', 'Task'])

# 对Task列生成独热编码
dummies_df = pd.get_dummies(df, columns=['Task'])

# 按Title分组,取最大值(同一Title下的标签只要出现过就保留1)
result = dummies_df.groupby('Title').max().reset_index()

# 重命名列名
result.columns = ['Title', 'Label1 (Animal)', 'Label2 (Bird)']

print(result)

这两种方法都避免了手动循环或繁琐的分组操作,完全利用pandas的高效内置函数,非常符合Pythonic的简洁风格~


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 23:38:11