我正在使用以下方法来查找具有55k行的熊猫数据帧的计数。这包括在站点列表的for循环中(4000个站点)。当包含下面的行时,需要很长时间才能完成4000个站点的循环。
for i in g_sitelist:
x = len(dfreglist[(dfreglist['site'] == i) & (dfreglist['isactive'] == 1)])
还有其他更好的方法可以使循环在一秒钟内完成。
答案 0 :(得分:1)
使用numpy-将每一列转换为数组并调用np.sum
:
m = (dfreglist['isactive'].values == 1)
for i in g_sitelist:
x = np.sum((dfreglist['site'].values == i) & m)
更快的解决方案:
df = dfreglist[dfreglist['site'].isin(g_sitelist) & (dfreglist['isactive'].values == 1)]
out = df['site'].value_counts()
答案 1 :(得分:1)
您可以使用value_counts()
:
site_counts = dfreglist[dfreglist['isactive'].eq(1)]['site'].value_counts()
这将提供一系列site
值和有效的计数,您可以对其进行迭代。