Pandas:数据重塑

16

我有一个 Pandas Series,目前看起来像这样:

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

即. 逻辑构造,将每个观测值(行)归入哪些类别。

我可以编写基于for循环的代码来解决问题,但由于需要处理的行数很多,这将非常慢。

是否有人知道这种问题的矢量化解决方案?我将非常感激。

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

1个回答

37
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

恭喜您获得金徽章!http://stackoverflow.com/help/badges/3296/pandas?userid=644898 - Andy Hayden
1
你能解释一下这是怎么工作的吗?当我查看创建的单个Series,例如Series(1,index=s[1])时,系列索引是列表中的字母(正如我所期望的)。但是s.apply()生成的DataFrame将系列索引作为列。这个透视是怎么发生的? - jdmarino
1
当apply的结果返回时,会进行一些推断。例如,如果返回标量,则会得到一个Series,这里的形状会向上转换为DataFrame。 - Jeff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接