gpt4 book ai didi

python - Many-Hot(N-hot)编码 - 快速 Pandas 方法?

转载 作者:太空宇宙 更新时间:2023-11-04 02:21:42 25 4
gpt4 key购买 nike

使用one-hot encoding,一旦你有一个包含 1 个值的列,让我们说“color”,pandas get_dummies 将做如下:

df = pd.DataFrame({'f1': ['red', 'yellow']})
df
Out[24]:
f1
0 red
1 yellow

pd.get_dummies(df)
Out[25]:
f1_red f1_yellow
0 1 0
1 0 1

ma​​ny-hot encoding”问题将出现在您可能拥有颜色列表的地方,如下例所示:

df = pd.DataFrame({'f1': ['red', ['yellow', 'blue']]})
df
Out[27]:
f1
0 red
1 [yellow, blue]

是否有任何优雅智能的 Pythonic 方式,希望在 Pandas 中得到支持,这将产生以下结果:

   f1_red  f1_yellow  f1_blue
0 1 0 0
1 0 1 1

最佳答案

您可以通过|加入list然后使用str.get_dummies :

s = df['f1'].apply(lambda x: '|'.join(x) if isinstance(x, list) else x)

df = s.str.get_dummies()
print (df)

blue red yellow
0 0 1 0
1 1 0 1

如果性能很重要,另一种解决方案:

s = df['f1'].apply(lambda x: x if isinstance(x, list) else [x])

from sklearn.preprocessing import MultiLabelBinarizer

mlb = MultiLabelBinarizer()
df = pd.DataFrame(mlb.fit_transform(s),columns=mlb.classes_)
print (df)
blue red yellow
0 0 1 0
1 1 0 1

关于python - Many-Hot(N-hot)编码 - 快速 Pandas 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51462420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com