Сгруппировать значение столбца за 2 часа - PullRequest
1 голос
/ 27 сентября 2019

У меня есть фрейм данных с колонками Дата, Время, Расстояние.Я хочу сгруппировать столбец расстояния для каждого дня с интервалом в 2 часа.Я проверил вопрос, заданный в переполнении стека, но он не дает мне требуемого вывода.

Пример кода, который я вставил, взят из переполнения стека, но вывод не соответствует желаемому.

uniquedate = np.unique(df2["Date"])
for i in uniquedate:
    data_new1 = df2[df2['Date']==i]
    data_new2 = data_new1[['Real_time', 'Distance_km']].copy()
    data_new2.index = pd.to_timedelta(data_new2.index.astype(str))
    data_new2 = data_new2.resample('2H').sum()
    print(data_new2)

                 Distance_km
00:00:00.000000   276.850844
                 Distance_km
00:00:00.000000   193.115217

Я получил этот вывод, но это не так, как требуется

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

Попробуйте:

data_new2.groupby([data_new2.index,pd.TimeGrouper(freq='2H')]).sum()

Пожалуйста, избегайте копирования кода вставки из переполнения стека.Чаще всего решения не будет достаточно для вашего случая использования.Кроме того, это ленивый.

РЕДАКТИРОВАТЬ Сделайте ваш индекс как дату или время, и тогда вам нужно будет выполнить простую повторную выборку.

import pandas as pd
idx = pd.date_range('2018-01-01', periods=5, freq='H')
ts = pd.Series(range(len(idx)), index=idx)
ts = ts.resample('2H').sum()
0 голосов
/ 27 сентября 2019

Я точно не знаю, правильно ли я вас понял - главным образом потому, что вы не публикуете пример своих данных.

Однако, вот mcve:

# dtrg = pd.date_range('01.Jan.1999 21:17', '02.Jan.1999 04:23', freq='10min')
# df = pd.DataFrame({'distance': np.random.randint(1, 5, len(dtrg)) * 10}, index=dtrg)

# df.head()
#                      distance
# 1999-01-01 21:17:00        30
# 1999-01-01 21:27:00        40
# 1999-01-01 21:37:00        10
# 1999-01-01 21:47:00        30
# 1999-01-01 21:57:00        30

с этими данными вы можете просто сгруппировать по индексу datetime в 2H-срезах и суммировать расстояние:

df.groupby(pd.Grouper(freq='2H')).sum()

                     distance
1999-01-01 20:00:00       140
1999-01-01 22:00:00       340
1999-01-02 00:00:00       370
1999-01-02 02:00:00       300
1999-01-02 04:00:00        40

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

пример структуры данных:

         date   time  distance
0  01.01.1999  09:00        10

преобразование столбцов даты и времени в индекс даты и времени:

df.set_index(pd.to_datetime(df.date.str.cat(df.time, sep=' '))).distance

date
1999-01-01 09:00:00    10
Name: distance, dtype: int64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...