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

