【发布时间】:2016-10-28 04:51:20
【问题描述】:
我有一个如下所示的数据框:
business_id stars categories
0 abcd 4.0 ['Nightlife']
1 abcd1 3.5 ['Pizza', 'Restaurants']
2 abcd2 4.5 ['Groceries', 'Food']
我想根据类别列中的值过滤数据框。我的数据框有大约 400 000 行,我只想要其中包含“食物”或“餐厅”类别的行。
我尝试了很多方法,包括:
def foodie(x):
for row in x.itertuples():
if 'Food' in row[3] or 'Restaurant' in row[3]:
return x
df = df.apply(foodie, axis=1)
但这显然是一个非常非常糟糕的方法,因为我在 400 000 行上使用了 itertuples,而我的系统继续处理无限长的时间。
我还尝试在df[df['categories']] 中使用列表推导。但不能,因为它们都像df[df['stars']==4.0] 一样过滤。甚至我看到的所有apply() 方法都是针对在其列中具有单个值的列实现的。
那么,如何使用相当快的迭代行实现对我的数据框进行子集化,同时仅选择那些在其类别中具有“食物”或“餐厅”的行?
【问题讨论】: