Python 中的单热编码,用于 DataFrame 中的数组值
One-hot encoding in Python for array values in a DataFrame
我正在尝试对这些集群数据帧进行一次性编码。 (按长度分组)。一直在尝试使用 sklearn 的编码器,但它似乎将每一行视为一个类别而不是多个类别。
示例输入:
ID trace length
3 [A, B, C, C] 4
4 [A, B, C, C, D] 5
5 [A, B, C, C, D, E] 6
24 [A, B, C, C] 4
25 [A, B, C, C, D] 5
... ... ...
预期输出:
ID A B C D E length
3 1 1 1 0 0 4
4 1 1 1 1 0 5
5 1 1 1 1 1 6
24 1 1 1 0 0 4
25 1 1 1 1 0 5
.... ..... .. ......
IIUC,如果目标包含列表,你可以这样做:
(df.drop('trace',1)
.join(df['trace']
.apply('|'.join)
.str.get_dummies()
)
)
或 df
的就地修改:
df = (df.join(df.pop('trace')
.apply('|'.join)
.str.get_dummies())
)
或使用 explode
和 pivot_table
:
(df.explode('trace')
.assign(x=1)
.pivot_table(index=['ID', 'length'], columns='trace', values='x', aggfunc='first')
.fillna(0, downcast='infer')
.reset_index()
)
输出:
ID length A B C D E
0 3 4 1 1 1 0 0
1 4 5 1 1 1 1 0
2 5 6 1 1 1 1 1
3 24 4 1 1 1 0 0
4 25 5 1 1 1 1 0
我正在尝试对这些集群数据帧进行一次性编码。 (按长度分组)。一直在尝试使用 sklearn 的编码器,但它似乎将每一行视为一个类别而不是多个类别。
示例输入:
ID trace length
3 [A, B, C, C] 4
4 [A, B, C, C, D] 5
5 [A, B, C, C, D, E] 6
24 [A, B, C, C] 4
25 [A, B, C, C, D] 5
... ... ...
预期输出:
ID A B C D E length
3 1 1 1 0 0 4
4 1 1 1 1 0 5
5 1 1 1 1 1 6
24 1 1 1 0 0 4
25 1 1 1 1 0 5
.... ..... .. ......
IIUC,如果目标包含列表,你可以这样做:
(df.drop('trace',1)
.join(df['trace']
.apply('|'.join)
.str.get_dummies()
)
)
或 df
的就地修改:
df = (df.join(df.pop('trace')
.apply('|'.join)
.str.get_dummies())
)
或使用 explode
和 pivot_table
:
(df.explode('trace')
.assign(x=1)
.pivot_table(index=['ID', 'length'], columns='trace', values='x', aggfunc='first')
.fillna(0, downcast='infer')
.reset_index()
)
输出:
ID length A B C D E
0 3 4 1 1 1 0 0
1 4 5 1 1 1 1 0
2 5 6 1 1 1 1 1
3 24 4 1 1 1 0 0
4 25 5 1 1 1 1 0