在Python中根据DF创建要素表
问题描述
我有以下df:
id step1 step2 step3 step4 .... stepn-1, stepn, event
1 a b c null null null 1
2 b d f null null null 0
3 a d g h l m 1
其中id表示会话,步骤表示特定路径,事件表示是否发生了特定的事情
我想要创建一个功能存储,我们可以在其中执行所有可能的步骤(a、b、c、...一直到某个任意数字),并使它们成为列。然后,我希望x列保持id
,如果该会话命中列中的该步骤,则它只填充1或0。结果如下:
id a b c d e f g ... n event
1 1 1 1 0 0 0 0 0 1
2 0 1 0 0 0 1 0 0 0
3 1 0 0 1 0 0 1 1 1
我有一个包含所有可能步骤的唯一列表,我假定这些步骤将用于构造新表。但在那之后,我在苦苦思索如何创造这个。
解决方案
您正在寻找的内容经常用于机器学习,称为一热编码。
有一个专门为此目的设计的 pandas 功能,名为pd.get_dummies()
。
step_cols = [c for c in df.columns if c.startswith('step')]
other_cols = [c for c in df.columns if not c.startswith('step')]
new_df = pd.get_dummies(df[step_cols].stack()).groupby(level=0).max()
new_df[other_cols] = df[other_cols]
输出:
>>> new_df
a b c d f g h l m id event
0 1 1 1 0 0 0 0 0 0 1 1
1 0 1 0 1 1 0 0 0 0 2 0
2 1 0 0 1 0 1 1 1 1 3 1
相关文章