gpt4 book ai didi

python - 在 Python 中显式设置虚拟变量

转载 作者:行者123 更新时间:2023-12-05 08:48:26 26 4
gpt4 key购买 nike

假设我有如下所示的数据:

data = {'Name':['Tom', 'Bob', 'Dan', 'Jack'], 
'Color1':['red', 'red', 'black', 'blue'],
'Color2':['blue', 'green', 'green', 'white'],
'Color3':['orange', 'purple', 'white', 'red'],
'Color4':['', 'yellow', 'purple', '']
}
df = pd.DataFrame(data)

我想为每个人设置虚拟变量,这样如果在 color1, color2, color3, color4 中为某个人列出了特定颜色,那么该人会收到一个 1,否则该人将收到 0。但是,我对为出现的每种颜色设置虚拟变量不感兴趣:我只对为红色、黑色和黄色设置变量感兴趣。

因此预期的输出将是:

result = {'Name':['Tom', 'Bob', 'Dan', 'Jack'], 
'hasRed':[1, 1, 0, 1],
'hasBlack':[0, 0, 1, 0],
'hasYellow':[0, 0, 1, 0]
}
result_df = pd.DataFrame(result)

我知道 pandas 有一个 get_dummy 函数,但我认为它不能像我需要的那样用于特定变量的多个列。有关如何执行此操作的任何建议?

最佳答案

让我们尝试融合数据框、过滤颜色和交叉表:

colors = ['red','blue','yellow']

tmp = (df.melt('Name')
.loc[lambda x: x['value'].isin(colors)]
)

pd.crosstab(tmp['Name'],tmp['value']).add_prefix('has_').reset_index()

输出:

value  Name  has_blue  has_red  has_yellow
0 Bob 0 1 1
1 Jack 1 1 0
2 Tom 1 1 0

关于python - 在 Python 中显式设置虚拟变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66107025/

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