Pandas значения счетчика данных выше порогового значения с использованием групповой оптимизации кода - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть большой 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)))

1 Ответ

0 голосов
/ 24 февраля 2020

Быстрая генерация данных:

n = 40000
m = 200
n_name = 1000
df = pd.DataFrame(np.random.randint(-10, 10, size=(n, m)))
# first generate random values, then add them to df all at once
df['name'] = (np.random.randint(0, n_name, n)).astype(str)
df['name'] = 'Name_' + df['name']

Быстрый поиск положительных значений по группе:

df.groupby('name').apply(lambda x: (x.iloc[:, :-1] > 0).sum())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...