【问题标题】:Pandas: reshaping data熊猫:重塑数据
【发布时间】:2013-05-14 06:46:20
【问题描述】:

我有一个熊猫系列,目前看起来像这样:

14    [Yellow, Pizza, Restaurants]
...
160920                  [Automotive, Auto Parts & Supplies]
160921       [Lighting Fixtures & Equipment, Home Services]
160922                 [Food, Pizza, Candy Stores]
160923           [Hair Removal, Nail Salons, Beauty & Spas]
160924           [Hair Removal, Nail Salons, Beauty & Spas]

我想从根本上将它重塑成一个看起来像这样的数据框......

      Yellow  Automotive  Pizza
14       1         0        1
…           
160920   0         1        0
160921   0         0        0
160922   0         0        1
160923   0         0        0
160924   0         0        0

即。一个逻辑结构,指出每个观察(行)属于哪些类别。

我能够编写基于循环的代码来解决问题,但鉴于我需要处理大量行,这将非常慢。

有人知道此类问题的矢量化解决方案吗?我将不胜感激。

编辑:有 509 个类别,我有一个列表。

【问题讨论】:

    标签: python pandas categories vectorization


    【解决方案1】:
    In [9]: s = Series([list('ABC'),list('DEF'),list('ABEF')])
    
    In [10]: s
    Out[10]: 
    0       [A, B, C]
    1       [D, E, F]
    2    [A, B, E, F]
    dtype: object
    
    In [11]: s.apply(lambda x: Series(1,index=x)).fillna(0)
    Out[11]: 
       A  B  C  D  E  F
    0  1  1  1  0  0  0
    1  0  0  0  1  1  1
    2  1  1  0  0  1  1
    

    【讨论】:

    • 先生,这非常非常聪明。
    • 您能解释一下这是如何工作的吗?当我查看创建的单个系列时,例如Series(1,index=s[1]), 系列索引是列表中的字母(如我所料)。但是 s.apply() 会产生一个以系列索引为列的 ​​DataFrame。枢轴是如何发生的?
    • 当应用的结果被返回时,会有一些推断。例如。如果返回标量,那么您将返回一个系列,这里的形状“向上转换”到一个 DataFrame。
    猜你喜欢
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多