Сгруппируйте строки фрейма данных на основе разницы во времени - PullRequest
1 голос
/ 17 октября 2019

Я хочу сгруппировать строки фрейма данных по разнице во времениэто?

1 Ответ

1 голос
/ 17 октября 2019

Используйте следующий код:

df2 = df.sort_values('time').copy()
rows = []    # Container for output rows
while df2.index.size:
    t0 = df2.iloc[0].time           # "Start" time
    tEnd = t0 + pd.Timedelta('30m') # "End" time
    d0 = t0.normalize()             # Date part
    # Group of source rows: up to the "end" time and same day
    grp = df2[(df2.time <= tEnd) & (df2.time.dt.normalize() == d0)]
    # Compute the output row (and append)
    rows.append([grp.name.iloc[0], grp.time.min(), grp.time.max(),
        grp.value.min(), grp.day.iloc[0]])
    df2.drop(grp.index, inplace=True)    # Delete "processed" rows
# Create result DataFrame
res = pd.DataFrame(rows, columns=['name', 'start', 'end', 'value', 'day'])

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

Результат такой же, как вы ожидали.

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

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