假设我有一个包含这两列的数据框。
User_id hotel_cluster
1 0
2 2
3 2
3 3
3 0
4 2
我想将其更改为类似这样的内容。我需要写一个函数还是有熊猫做的方法?
User_id hotel_cluster_0 hotel_cluster_1 hotel_cluster_2 hotel_cluster_3
1 1 0 0 0
2 0 0 1 0
3 1 0 1 1
4 0 0 1 0
请帮助!抱歉,如果我没有以正确的格式发布问题 谢谢!
答案 0 :(得分:2)
IIUC:
首先将'hotel_cluster'
更改为包含不存在类别的类别
col = 'hotel_cluster'
df[col] = pd.Categorical(df[col], categories=[0, 1, 2, 3])
pd.crosstab(*map(df.get, df)).add_prefix(f"{col}_")
hotel_cluster hotel_cluster_0 hotel_cluster_1 hotel_cluster_2 hotel_cluster_3
User_id
1 1 0 0 0
2 0 0 1 0
3 1 0 1 1
4 0 0 1 0
在crosstab
之后重新索引
pd.crosstab(*map(df.get, df)).reindex(
columns=range(4), fill_value=0
).add_prefix('hotel_cluster_')
hotel_cluster hotel_cluster_0 hotel_cluster_1 hotel_cluster_2 hotel_cluster_3
User_id
1 1 0 0 0
2 0 0 1 0
3 1 0 1 1
4 0 0 1 0
答案 1 :(得分:1)
如果不需要不需要的值,一种简单的方法是使用pd.get_dummies
:
pd.get_dummies(df.hotel_cluster, prefix = 'hotel_cluster').set_index(df.User_id)
否则,您需要类似@piRSquared的解决方案。