事件开始结束到python中的热编码

Guy*_*ash 3 python machine-learning pandas one-hot-encoding

我有一个带有 2 列“类型”和“符号”的熊猫数据框,如下所示

    type    sign
0   open    A
1   open    B
2   open    D
3   close   B
4   close   D
5   open    B
6   close   B
7   close   A
Run Code Online (Sandbox Code Playgroud)

"A" + "open" 表示事件 A 已经开始发生。"A" + "close" 表示事件 A 已经停止。当时间是一个主要问题时,我需要对其进行矢量化(该列表实际上大约有 4000 万行)。有点像单热编码,但当且仅当事件是“活动的”时,我需要“1”才能存在。例如,对于这种情况,结果应该是:

    A   B   C   D   type    sign
0   1   0   0   0   open    A
1   1   1   0   0   open    B
2   1   1   0   1   open    D
3   1   0   0   1   close   B
4   1   0   0   0   close   D
5   1   1   0   0   open    B
6   1   0   0   0   close   B
7   0   0   0   0   close   A
Run Code Online (Sandbox Code Playgroud)

想法?谢谢

WeN*_*Ben 5

IIUC 让做get_dummies然后做cumsum

s=df.sign.str.get_dummies().reindex(columns=list('ABCD'),fill_value=0).\
    mul(df.type.map({'open':1,'close':-1}),axis=0).cumsum()
   A  B  C  D
0  1  0  0  0
1  1  1  0  0
2  1  1  0  1
3  1  0  0  1
4  1  0  0  0
5  1  1  0  0
6  1  0  0  0
7  0  0  0  0
df=df.join(s)
Run Code Online (Sandbox Code Playgroud)