如何将pandas dataframe转换为考虑amount列的类one hot encoding格式
实现方法
最便捷的方式是直接使用pandas内置的方法实现,根据你的使用场景可以二选一:
场景1:逐行转换,保留所有原始行
不需要聚合,仅将category字段转为多列one hot格式,对应分类的列填充当前行的amount值,其余列填0,用get_dummies方法即可:
import pandas as pd # 假设df为你的原始DataFrame one_hot_df = pd.concat( [df[["date", "amount"]], pd.get_dummies(df["category"], prefix="category").mul(df["amount"], axis=0)], axis=1 )
场景2:按日期聚合,生成日期维度的宽表
如果需要按date分组,同一个日期下同一分类的amount自动求和、缺失分类填充0,用pivot_table一行即可实现:
import pandas as pd # 假设df为你的原始DataFrame one_hot_df = pd.pivot_table( df, index="date", columns="category", values="amount", aggfunc="sum", fill_value=0, dropna=False ).reset_index().rename_axis(columns=None).add_prefix("category_")
参数说明
index:指定保留为行的字段,这里为datecolumns:指定要转成one hot列的分类字段,这里为categoryvalues:指定one hot列的填充值来源,这里为amountfill_value=0:将没有对应记录的空缺位置填充为0,符合one hot的格式规范add_prefix("category_"):给生成的one hot列加统一前缀,和其他字段做区分
内容的提问来源于stack exchange,提问作者Raphael
相关产品推荐
相关产品推荐

