如何将布尔型Pandas DataFrame转换为分类Series
Pandas布尔DataFrame转分类Series实现方案
方法1:使用idxmax(最简洁,适配你的场景)
布尔值中True等价于1、False等价于0,你的DataFrame每行恰好只有一个True值,直接调用idxmax方法即可返回每行最大值对应的列名,完全符合需求:
import pandas as pd # 构造示例DataFrame,和你给出的结构一致 df = pd.DataFrame({ 'A': [False, False, False, False, True], 'B': [False, True, True, True, False], 'C': [False]*5, 'D': [False]*5, 'E': [False]*5, 'F': [True, False, False, False, False] }) # 核心转换代码,直接得到目标Series classes_series = df.idxmax(axis=1).rename('Classes')
方法2:使用dot方法(可选,逻辑直观)
利用矩阵点乘的特性,也可以快速得到结果,逻辑更易理解:
classes_series = df.dot(df.columns).rename('Classes')
运行逻辑:每行只有一个True,点乘后只会保留该True对应的列名字符串。
结果验证
输出classes_series即可得到你需要的结构:
0 F 1 B 2 B 3 B 4 A Name: Classes, dtype: object
如果你需要把Series的 dtype 转为分类类型,可以追加一步类型转换:
classes_series = classes_series.astype('category')
注意:以上两种方法均适配你当前「每行仅一个True」的场景,如果后续业务中出现一行有多个True的情况,
idxmax会返回第一个出现的True对应的列名,dot会将所有True对应的列名直接拼接为字符串。
内容的提问来源于stack exchange,提问作者tharchen
相关产品推荐
相关产品推荐

