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

如何基于Pandas的ID列对Names列生成目标独热编码数据框?

解决方法:长格式转宽格式二进制矩阵

嘿,我懂你要做的这个转换——把长格式的ID关联多名称的数据转成宽格式的二进制标记表对吧?你试过的groupby和pd.get_dummies其实是关键,只是没把它们正确结合起来而已,我给你个可行的方案:

实现步骤

  1. 生成独热编码:用pd.get_dummies把Names列转换成二进制列,每一行对应一个名称的标记(存在为1,不存在为0)。
  2. 分组聚合:按ID分组,对每个名称列求和(或取最大值),这样同一ID下的所有名称标记会被合并到一行里。
  3. 调整格式:重置索引让ID回到列中,匹配你想要的输出样式。

完整代码示例

import pandas as pd

# 模拟你的输入数据框
df = pd.DataFrame({
    'ID': [1, 1, 2, 2],
    'Names': ['func_A', 'func_B', 'rain', 'fire']
})

# 1. 生成Names的独热编码,并和ID列合并
dummies_df = pd.concat([df['ID'], pd.get_dummies(df['Names'])], axis=1)

# 2. 按ID分组求和,聚合同一ID下的所有标记
result_df = dummies_df.groupby('ID').sum().reset_index()

# 查看结果
print(result_df)

输出结果

ID  func_A  func_B  rain  fire
0   1       1       1     0     0
1   2       0       0     1     1

补充说明

  • 如果你的数据中同一ID下可能存在重复的Names,可以把sum()换成max(),这样即使重复也只会得到1(确保标记是0/1的二进制格式):
    result_df = dummies_df.groupby('ID').max().reset_index()
    
  • 之前单独用pd.get_dummies只会生成每行的标记,没有合并同一ID的记录;单独用groupby又缺少独热编码的转换,把两者结合就正好满足需求啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:14:07