gpt4 book ai didi

python - 如何使用pandas基于两个分类列的组合进行单热编码?

转载 作者:行者123 更新时间:2023-12-03 20:23:26 26 4
gpt4 key购买 nike

我正在尝试用 Pandas 做一些单热编码。输入数据如下所示:

import pandas as pd

# input data
df = pd.DataFrame({
"pid" : [1, 1, 2, 3],
"code" : ["a", "b", "b", "c"],
"time" : [0, 0, 1, 0]
})

# two of the columns are categories
df["code"] = df.code.astype("category")
df["time"] = df.time.astype("category")
我想对列的组合进行单热编码 codetime以生成与每列中类别的所有组合相对应的 6 列的方式。在这个小例子中,这将是 a_0、a_1、b_0、b_1、c_0 和 c_1。
# i've tried doing this:
df["code_time"] = df.code.astype("str") + df.time.astype("str")
del df["code"]
del df["time"]
pd.get_dummies(df, columns=["code_time"])
但这不会给我 a_1 和 c_1 组合,因为它们没有出现在数据中。是否有任何直接的方法来产生我想要的输出:
df_out = pd.DataFrame({
"pid" : [1, 2, 3]
"a_0" : [1, 0, 0]
"a_1" : [0, 0, 0]
"b_0" : [1, 0, 0]
"b_1" : [0, 1, 0]
"c_0" : [0, 0, 1]
"c_1" : [0, 0, 0]
})

最佳答案

一个简单的解决方案是创建完整的产品:

from itertools import product
code_times = [f'{x}_{y}' for x,y in product(df['code'].unique(), df['time'].unique())]

data = df.code.astype("str") + '_'+ df.time.astype("str")

# use crosstab for get_dummies() + sum by id
pd.crosstab(df['pid'], data).reindex(code_times, fill_value=0, axis=1)
输出:
col_0  a_0  a_1  b_0  b_1  c_0  c_1
pid
1 1 0 1 0 0 0
2 0 0 0 1 0 0
3 0 0 0 0 1 0

关于python - 如何使用pandas基于两个分类列的组合进行单热编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66122583/

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