【问题标题】:Create a hot vector of specific columns with pandas dataframe使用 pandas 数据框创建特定列的热向量
【发布时间】:2018-09-22 11:42:24
【问题描述】:

我有一个这样的数据框

   user_id    Amount    Event
1       28        22       e1
2       32        16       e2
3       28        55       e2
4       33        18       e3
5       28        28       e1

我期望输出为

   user_id    e1     e2    e3
1       28    50     55     0
2       32     0     16     0
3       33     0      0    18

输出说明:

而不是列中的事件名称,它应该以一种热矢量样式进入列名称。 而不是一个热向量中的 {0,1},数量(如果存在)应该出现。 如果用户对一个事件有多个条目,那么金额的总和应该来。

我尝试添加 dataframe.get_dummies 方法,但它只给了我一个热向量表示,而不是其中的数量。

谢谢

【问题讨论】:

    标签: python pandas one-hot-encoding


    【解决方案1】:

    你可以使用数据透视表

    pd.pivot_table(df,values='Amount',index='user_id',columns='Event',aggfunc='sum').fillna(0)
    

    输出:

       Event      e1       e2   e3
    user_id         
    28          50.0    55.0    0.0
    32          0.0     16.0    0.0
    33          0.0      0.0    18.0
    

    【讨论】:

    • 不错。你可以稍微简化一下:df.pivot_table(values='Amount', index='user_id', columns='Event', aggfunc='sum')
    • @Naga 它有效 谢谢。只有一个问题,在我的问题中总共有 3 个事件有 e1、e2、e3,但我有一个事件列表 [e1、e2、e3、e4]。 e4 不在数据框中,但我仍然想将它与带有所有 NaN 值的热向量一起包含在外部。我可以使用列名列表或类似的东西来代替列吗?
    • @你必须在数据框(df)中附加事件 e4 的行。如果您有单独的 e4 信息数据框,请连接两个数据框并提供给 pd.concat 函数。它会工作:-)
    • 是的 concat 选项始终存在。但是,如果我可以为此使用一些预定义的功能。仍然感谢您的回复。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 2017-06-15
    • 2017-06-13
    相关资源
    最近更新 更多