Самый быстрый и эффективный способ агрегирования большого набора данных в python - PullRequest
1 голос
/ 19 февраля 2020

Допустим, я измеряю скорость с течением времени автомобиля, движущегося вперед по одной оси, с новым показателем каждые 10 минут.

У меня в столбце данных есть столбец с именем delta_x, который содержит информацию о том, сколько автомобилей двигалось по моей оси за последние 10 минут, значения только целые.

Теперь давайте скажем, что я хочу агрегировать свои данные и иметь только количество движения за каждый час, но я хотите максимально оптимизировать мой код, потому что мой набор данных очень большой, какой самый эффективный способ добиться этого?

df.head(9)

    date        time    delta_x
0   01/01/2018  00:00   9
1   01/01/2018  00:10   9
2   01/01/2018  00:20   9
3   01/01/2018  00:30   9
4   01/01/2018  00:40   11
5   01/01/2018  00:50   12
6   01/01/2018  01:00   10
7   01/01/2018  01:10   10
8   01/01/2018  01:20   10

В настоящее время мое решение состоит в следующем

for file in os.listdir('temp'):
    if(file.endswith('.txt'):
        df = pd.read_csv(''.join(["./temp/",file]), header=None, delim_whitespace=True)
        df.columns = ['date', 'time', 'delta_x']
        df['hour'] = [(datetime.strptime(x, "%H:%M")).hour for x in df['time'].values]
        df = df.groupby(['date','hour']).agg({'delta_x': 'sum'})

Какой вывод правильный:


date        hour   delta_x
01/01/2018  0      59

Но мне было интересно, есть ли лучший, более быстрый и эффективный способ, возможно, с использованием NumPy?

1 Ответ

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

Вы можете попробовать следующие пакеты, которые используются для ускорения pandas операции

https://github.com/jmcarpenter2/swifter

https://github.com/modin-project/modin

...