gpt4 book ai didi

python - 根据一列中存在的列名填充数据框中的其他列

转载 作者:太空宇宙 更新时间:2023-11-04 01:55:09 24 4
gpt4 key购买 nike

我有一个包含 ~300 列的数据框,列从 'Prod1' 到 'Prod300' ,如下所示:

ID   Product Prod1 Prod2 Prod3 Prod4 Prod5 Prod6 Prod7
01 1 0 0 0 0 0 0 0
01 2 0 0 0 0 0 0 0
01 3 0 0 0 0 0 0 0
02 1 0 0 0 0 0 0 0
02 4 0 0 0 0 0 0 0
03 3 0 0 0 0 0 0 0
04 6 0 0 0 0 0 0 0

我想要的是根据'Product'列中的值简单地填充相应的'Prod'列,即下面的df作为输出-

ID   Product Prod1 Prod2 Prod3 Prod4 Prod5 Prod6 Prod7
01 1 1 0 0 0 0 0 0
01 2 0 1 0 0 0 0 0
01 3 0 0 1 0 0 0 0
02 1 1 0 0 0 0 0 0
02 4 0 0 0 1 0 0 0
03 3 0 0 1 0 0 0 0
04 6 0 0 0 0 0 1 0

问题是,我知道我总共只有 300 种产品,但我可能无法获得“产品”列中的所有值,我也想保留“Prod7”列,即使它不在“Product' 列,所有值 = 0。所以,我不能使用 pivot_table...

我试过循环遍历“产品”列,如下所示:

for row in range ( len( df['Product'])) :
df['Prod' + str( df['Product'][row] ) ][row] = 1

我上面所做的是逐一检查“Product”列中的值,然后在相应列和同一行中填充 1。

此外,由于从 Prod1 到 Prod300 有 300 列,我不想像下面这样逐列进行:

df['Prod1'] = np.where(df['Product'] == 1, 1 , 0)
df['Prod2'] = np.where(df['Product'] == 2, 1 , 0)
df['Prod3'] = np.where(df['Product'] == 3, 1 , 0)
........
........

现在上面的代码可以工作了,但我知道你不应该使用 for 循环,因为它们很慢。

可能是因为我是 python 的新手,它真的很简单,但任何替代方案都会非常感激。我还担心代码的运行时,所以任何比以前更快的东西都会非常有帮助......

最佳答案

此处不需要空列。

使用get_dummies对于新的指标列,添加 DataFrame.reindex用于按 range 和 last DataFrame.add_prefix 添加不存在的列:

df1 = (pd.get_dummies(df['Product'])
.reindex(range(1, 8), axis=1, fill_value=0)
.add_prefix('Prod'))
print (df1)
Prod1 Prod2 Prod3 Prod4 Prod5 Prod6 Prod7
0 1 0 0 0 0 0 0
1 0 1 0 0 0 0 0
2 0 0 1 0 0 0 0
3 1 0 0 0 0 0 0
4 0 0 0 1 0 0 0
5 0 0 1 0 0 0 0
6 0 0 0 0 0 1 0

然后可以使用 DataFrame.join原始 DataFrame 的前 2 列:

df2 = df.iloc[:, :2].join(df1)
print (df2)
ID Product Prod1 Prod2 Prod3 Prod4 Prod5 Prod6 Prod7
0 1 1 1 0 0 0 0 0 0
1 1 2 0 1 0 0 0 0 0
2 1 3 0 0 1 0 0 0 0
3 2 1 1 0 0 0 0 0 0
4 2 4 0 0 0 1 0 0 0
5 3 3 0 0 1 0 0 0 0
6 4 6 0 0 0 0 0 1 0

关于python - 根据一列中存在的列名填充数据框中的其他列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56971676/

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