如何解决不断变化的数据框问题

时间:2018-11-21 18:02:53

标签: python pandas dataframe

假设我有一个包含这两列的数据框。

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

请帮助!抱歉,如果我没有以正确的格式发布问题 谢谢!

2 个答案:

答案 0 :(得分:2)

SEE ALSO


IIUC:

选项1

首先将'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

选项2

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的解决方案。