此代码循环遍历约1400万行的巨型数据框,其中每一行都是已发表的文章。我们的目标是查看all_keywords
中的每个关键字(有约400个关键字),并找到关键字的首次出现和最后出现的日期。
ranges = {}
for dk in all_keywords:
dk_df = df.loc[[(dk in map(str.lower, x)) for x in df['keywords']]]
first_appearance = dk_df['date'].iloc[0].strftime('%Y')
last_appearance = dk_df['date'].iloc[-1].strftime('%Y')
ranges[dk] = [first_appearance, last_appearance]
问题在于此代码太慢了。需要几个小时。
怎么会更快?
我怀疑问题在于循环遍历每个关键字,还是将所有关键字映射到df['keywords']
中的每个数组。
答案 0 :(得分:0)
如果没有示例数据,我将无法检查它,通常,裸循环不是如何使用数据框。在您的情况下,groupby
选择每个键的性能应该更高。
df.groupby('keywords').first()['date']
df.groupby('keywords').last()['date']