使用NumPy矢量化创建包含另一列长度的列

时间:2015-08-18 17:58:36

标签: python numpy pandas

我想我在这里有一个非常直截了当的问题。基本上我有一个包含一列的表,其中每行包含一组先前已从JSON字符串转换的值。

例如,以下是列"选项"的一个单元格值:

[u'Tide Liquid with a Touch of Downy April Fresh 69oz', u'Tide Liquid with Febreze Spring & Renewal 69oz (HE or Non-HE)', u'Tide Liquid HE with Febreze Sport 69oz', u'Tide Liquid HE Clean Breeze 75oz', u'Tide Liquid Original 75oz', u'Other']

我想添加一个新列,它只计算此列表中的值数。我可以使用类似的代码逐行执行此操作:

df['num_choices'] = len(df.loc[row_num,'options'])

(即我想计算列"选项"中的值的数量,并在名为&#34的新列中返回该计数; num_choices")

在上面提供的示例(输入行#)上运行此操作将在其旁边创建一个值为6的新列,因为选项的数量为6.

如何系统地为我的所有5000行做这个?

我尝试用Pandas iterrow()函数做到这一点,但是我被告知这样做的效率低于简单地使用NumPy ndArray矢量化。但我似乎无法弄清楚如何做到这一点。

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

正如上面的评论中所提到的,实际上没有任何方法可以对包含任意Python对象的数组进行矢量化操作。

我认为你不能比使用简单的for循环或列表理解做得更好,例如:

df['num_choices'] = np.array([len(row) for row in df.options])