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

如何将DataFrame行转置为布尔型列?实现存在性标记

解决方法

给你两种简便的实现方式,都基于Python的Pandas库:

方法一:使用pd.crosstab(最直接)

crosstab专门用来生成交叉统计表,刚好匹配你的需求,只需两步就能得到结果:

import pandas as pd

# 构造原始DataFrame
df = pd.DataFrame({
    'id': [1,1,2,2,2,3,3,4],
    'colour': ['blue','blue','green','blue','black','blue','blue','green']
})

# 生成交叉表,再把计数转为1/0(只要出现过就标记为1)
result = pd.crosstab(df['id'], df['colour']).reset_index()
result = result.apply(lambda col: col.map(lambda x: 1 if x > 0 else 0))

方法二:使用get_dummies + groupby

先对colour列做独热编码,再按id分组取最大值(只要该id下存在对应颜色,就保留1):

import pandas as pd

df = pd.DataFrame({
    'id': [1,1,2,2,2,3,3,4],
    'colour': ['blue','blue','green','blue','black','blue','blue','green']
})

# 生成颜色的独热编码列
colour_dummies = pd.get_dummies(df['colour'])
# 合并id列与编码列
df_combined = pd.concat([df['id'], colour_dummies], axis=1)
# 按id分组取最大值,得到最终结果
result = df_combined.groupby('id').max().reset_index()

两种方法最终得到的result结构都和你需要的一致:

id  blue  green  black
0   1     1      0      0
1   2     1      1      1
2   3     1      0      0
3   4     0      1      0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:21:01