Допустим, я измеряю скорость с течением времени автомобиля, движущегося вперед по одной оси, с новым показателем каждые 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?