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

如何对数据框中独热编码(OHE)后的列按用户分组求和?

解决方案

方法一:Pandas原生组合操作(最简便)

先通过pd.get_dummies生成独热编码列,再按user分组求和,一步完成需求:

import pandas as pd

# 构造原始数据框
df = pd.DataFrame({
    'user': [2, 2, 3],
    'product': ['A', 'A', 'B']
})

# 生成独热编码并按user分组聚合求和
result = pd.get_dummies(df, columns=['product']).groupby('user').sum().reset_index()

print(result)

输出结果:

user  product_A  product_B
0     2          2          0
1     3          0          1

方法二:交叉表直接统计频次

用pd.crosstab可以直接统计每个用户对应产品的出现次数,本质是一步实现分组+编码+求和:

# 生成交叉表
result = pd.crosstab(df['user'], df['product']).reset_index()

# 补充未出现的product_c列(按需添加)
result['product_c'] = 0
# 调整列顺序匹配期望格式
result = result[['user', 'product_A', 'product_B', 'product_c']]

print(result)

方法三:适配Scikit-learn流水线(适合大规模数据场景)

如果需要融入机器学习工作流,可使用OneHotEncoder完成编码后再分组:

from sklearn.preprocessing import OneHotEncoder
import pandas as pd

# 初始化编码器
encoder = OneHotEncoder(sparse_output=False, categories='auto')
# 对product列编码
encoded_data = encoder.fit_transform(df[['product']])
# 转成数据框并匹配列名
encoded_df = pd.DataFrame(encoded_data, columns=encoder.get_feature_names_out(['product']))
# 合并user列后分组求和
combined_df = pd.concat([df['user'], encoded_df], axis=1)
result = combined_df.groupby('user').sum().reset_index()

# 补充未出现的product_c列(按需添加)
if 'product_c' not in result.columns:
    result['product_c'] = 0

print(result)

补充说明

  • 方法一、二适合日常数据分析场景,代码简洁易读;
  • 方法三适合需要对接模型训练的流水线场景;
  • 多分类列场景下,只需调整get_dummies的columns参数,或在交叉表中添加对应变量即可扩展。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:55:29