У меня есть большой pandas фрейм данных, где я хочу подсчитать количество значений выше порога (нуля) в каждом столбце, сгруппированных по значениям в одном столбце имени.
Приведенный ниже код выполняет работу , но мне интересно, если это не нужно медленно. На моем компьютере это занимает более 60 секунд.
import pandas as pd
import numpy as np
import time
# Set up problem (also slow, but irrelevant at this point)
n = 40000
m = 200
n_name = 1000
df = pd.DataFrame(np.random.randint(-10, 10, size=(n, m)))
df['name'] = ''
for i in range(n):
df.loc[i, 'name'] = 'Name_' + str(np.random.randint(0, n_name))
# Slow code
t0 = time.time()
number_above_zero = df.groupby(by='name').apply(lambda x: x[x > 0].count())
t1 = time.time()
print('Computation time {} seconds.'.format(np.round(t1 - t0, 1)))