gpt4 book ai didi

python - 如何在 Python/Pandas 中构建 "many-hot"?

转载 作者:行者123 更新时间:2023-11-28 18:31:14 25 4
gpt4 key购买 nike

我需要将三列分类数据组合成一组二进制类别命名列。这类似于“one-hot”,但源行最多有三个类别,而不是只有一个。另外请注意,有 100 多个类别,我不会事先知道它们。

id, fruit1, fruit2, fruit3
1, apple, orange,
2, orange, ,
3, banana, apple,

应该生成...

id, apple, banana, orange
1, 1, 0, 1
2, 0, 0, 1
3, 1, 1, 0

最佳答案

你可以使用 pd.melt将所有水果列合并为一列,并使用 pd.crosstab创建频率表:

import numpy as np
import pandas as pd

df = pd.read_csv('data')
df = df.replace(r' ', np.nan)
# id fruit1 fruit2 fruit3
# 0 1 apple orange NaN
# 1 2 orange NaN NaN
# 2 3 banana apple NaN

melted = pd.melt(df, id_vars=['id'])
result = pd.crosstab(melted['id'], melted['value'])
print(result)

产量

value   apple   banana   orange
id
1 1 0 1
2 0 0 1
3 1 1 0

说明:熔化后的 DataFrame 如下所示:

In [148]:  melted = pd.melt(df, id_vars=['id']); melted
Out[149]:
id variable value
0 1 fruit1 apple
1 2 fruit1 orange
2 3 fruit1 banana
3 1 fruit2 orange
4 2 fruit2 NaN
5 3 fruit2 apple
6 1 fruit3 NaN
7 2 fruit3 NaN
8 3 fruit3 NaN

我们可以忽略variable列; idvalue 很重要。pd.crosstab 可用于在索引中使用 melted['id'] 值和 melted['value'] 创建频率表值作为列:

In [150]: pd.crosstab(melted['id'], melted['value'])
Out[150]:
value apple banana orange
id
1 1 0 1
2 0 0 1
3 1 1 0

关于python - 如何在 Python/Pandas 中构建 "many-hot"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37078548/

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