在Python中根据DF创建要素表

2022-04-16 00:00:00 python pandas data-analysis

问题描述

我有以下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

相关文章