此问题已在此处有答案:
Pandas: Get Dummies(5个答案)
7天前关闭
这篇文章7天前被编辑并提交审查。
我有一个pandas DataFrame,如下所示:
df = pd.DataFrame({
'Name': ['John', 'Mary', 'Mark', 'Sarah', 'John', 'Sarah', 'John'],
'Email': ['john@example.com', 'mary@example.com', 'mark@example.com', 'sarah@example.com', 'john@example.com', 'sarah@example.com', 'john@example.com'],
'Role_Name': ['Admin', 'User', 'Admin', 'User', 'Admin', 'Admin', 'User'],
'Last_Login': ['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04', '2022-01-01', '2022-01-05', '2022-01-06'],
'Organization_Name': ['Org1', 'Org2', 'Org1', 'Org2', 'Org2', 'Org2', 'Org3'],
'Created_By_Name': ['SuperUser', 'SuperUser', 'SuperUser2', 'SuperUser2', 'SuperUser', 'SuperUser', 'Eve'],
'Modified_By_Name': ['SuperUser', 'SuperUser', 'SuperUser2', 'SuperUser2', 'SuperUser', 'SuperUser2', 'SuperUser2']
})
此DataFrame包含有关各种用户的信息。某些用户多次出现在同一角色中,但可以访问不同的机构。
我想修改此DataFrame,使每个唯一的Email和Role_Name组合都有一行(例如,对于John将有两行,一行用于管理员角色,一行用于用户角色)。我希望Organization_Name列变为One-Hot Encoded,以便每个机构都有一个1列(此人有权访问此机构)和0 s(此人无权访问此机构)。
最后的DataFrame应该是这样的:
df = pd.DataFrame({
'Name': ['John', 'Mary', 'Mark', 'Sarah', 'Sarah', 'John'],
'Email': ['john@example.com', 'mary@example.com', 'mark@example.com', 'sarah@example.com', 'sarah@example.com', 'john@example.com'],
'Role_Name': ['Admin', 'User', 'Admin', 'User', 'Admin', 'User'],
'Last_Login': ['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04', '2022-01-05', '2022-01-06'],
'Created_By_Name': ['SuperUser', 'SuperUser', 'SuperUser2', 'SuperUser2', 'SuperUser', 'SuperUser2'],
'Modified_By_Name': ['SuperUser', 'SuperUser', 'SuperUser2', 'SuperUser2', 'SuperUser2', 'SuperUser2'],
'Org1': [1, 0, 1, 0, 0, 0],
'Org2': [1, 1, 0, 1, 1, 0],
'Org3': [0, 0, 0, 0, 0, 1]
})
对于如何做到这一点,有什么建议吗?
我已经尝试使用pivot_table
功能来实现这一点,但没有成功。
这与以下情况不同:Pandas: Get Dummies从我的示例输出中可以看到,我要求给定的行可以有多于1个Organization。例如,正如我在最初的帖子中提到的,John应该有2行,而不是3行。也许One-Hot是错误的术语。
1条答案
按热度按时间whlutmcx1#
join
acrosstab
,同时删除带有pop
的列:或者,如果每个索引只有一个匹配项,则为
get_dummies
输出: