如何将DataFrame中Department列转换为独热向量并按Customer聚合
解决方案:将DataFrame的Department列转换为按Customer聚合的独热向量
先明确你的原始数据和目标需求:
原始DataFrame
customer | Department ---------------------- A | Food B | Home A | Office C | Home A | Home B | Office
目标输出
customer | Food | Home | Office ----------------------------------- A | 1 | 1 | 1 B | 0 | 1 | 1 C | 0 | 1 | 0
用Python的Pandas库就能轻松实现这个需求,我一步步给你演示:
- 导入Pandas并构建原始DataFrame
如果已经有现成的DataFrame可以跳过这一步,否则先把数据转换成Pandas格式:
import pandas as pd # 构建原始数据 raw_data = { 'customer': ['A', 'B', 'A', 'C', 'A', 'B'], 'Department': ['Food', 'Home', 'Office', 'Home', 'Home', 'Office'] } df = pd.DataFrame(raw_data)
- 生成独热编码并与原数据合并
用pd.get_dummies()对Department列做独热编码,然后和customer列合并到一起:
# 生成部门的独热编码,去掉前缀让列名直接是部门名称 department_dummies = pd.get_dummies(df['Department'], prefix='', prefix_sep='') # 合并customer列和独热编码列 combined_df = pd.concat([df['customer'], department_dummies], axis=1)
- 按Customer聚合并转换为整数类型
按customer分组后取最大值(只要该客户关联过对应部门,结果就是1,没关联过则为0),最后重置索引并把编码列转为整数类型:
# 分组聚合+重置索引,让customer回到列的位置 result_df = combined_df.groupby('customer').max().reset_index() # 将编码列转为整数类型,符合你要的格式 result_df = result_df.astype({'Food': int, 'Home': int, 'Office': int})
- 查看最终结果
打印result_df就能得到你想要的输出:
print(result_df)
为什么用max()聚合?
因为同一个客户可能多次关联同一个部门(比如客户A两次关联Home),独热编码会生成多个1,取最大值可以确保只要客户出现过该部门,最终值就是1,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者Dipanjan Das
相关产品推荐
相关产品推荐

