【问题标题】:How to transform a one hot encoded dataframe to a basket sparse matrix如何将一个热编码数据帧转换为篮子稀疏矩阵
【发布时间】:2019-05-23 23:38:18
【问题描述】:

我想将一个单热编码的数据帧转换为一个篮子稀疏矩阵。

我有这个:

df
Ticket Number  Water  Orange  Lemon  Strawb.  Peach  Book  Pen
5001           0      0      0     0       1     1    0
5002           1      1      0     0       1     1    0
5003           1      0      0     0       0     0    0

我想要这个:

df
Ticket Number 
5001           Peach, Book
5002           Water, Orange, Peach, Book
5003           Water

我在这里尝试了一些想法:

Pivoting a One-Hot-Encode Dataframe

但我自己无法想出解决方案。

我们将不胜感激。谢谢

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    将“票号”设置为索引后,您可以使用DataFrame.dot

    u = df.set_index('Ticket Number')
    u.dot(u.columns+',').str.rstrip(',')
    
    Ticket Number
    5001                 Peach,Book
    5002    Water,Orange,Peach,Book
    5003                      Water
    dtype: object
    

    或者,

    u.dot(u.columns+',').str[:-1].reset_index(name='Items')
    
       Ticket Number                    Items
    0           5001               Peach,Book
    1           5002  Water,Orange,Peach,Book
    2           5003                    Water
    

    同一事物的稍微更健壮的版本:

    u = df.set_index('Ticket Number').select_dtypes([np.number])
    u = u.fillna(0, downcast='infer').clip(lower=0, upper=1)
    u.dot(u.columns+',').str[:-1]
    
    Ticket Number
    5001                 Peach,Book
    5002    Water,Orange,Peach,Book
    5003                      Water
    dtype: object
    

    【讨论】:

    • df.dot(df.columns+',').str[:-1]
    • 出于某种原因,我认为 .dot() 只与 bool 一起使用 :(
    • @anky_91 只要它的 0/1 以任何形式工作,它就可以工作。点会将字符串与数字“相乘”。 s * 0 是 '' 而 s * 1 是 s。这就是这里的诀窍。
    • 嗨@WeNYoBen 感谢您的努力。我遇到了这个错误:`TypeError: can't multiply sequence by non-int of type 'float'`
    • @cs95 感谢您的时间和帮助。我有一些值大于 1 的项目,因此它不起作用。感谢您的时间和精力!非常感谢
    【解决方案2】:

    任重而道远

    df.melt('TicketNumber').loc[lambda x :x['value']==1].groupby('TicketNumber').variable.agg(','.join)
    Out[746]: 
    TicketNumber
    5001                 Peach,Book
    5002    Water,Orange,Peach,Book
    5003                      Water
    Name: variable, dtype: object
    

    【讨论】:

      猜你喜欢
      • 2016-08-03
      • 1970-01-01
      • 2020-11-27
      • 2016-09-19
      • 2013-12-25
      • 2023-04-10
      • 2021-11-25
      • 2017-07-02
      • 2020-12-07
      相关资源
      最近更新 更多