столбец по группе, если значение меньше некоторого значения

#python #pandas #dataframe

Вопрос:

У меня есть фрейм данных, такой как

 df = pd.DataFrame({'time': [1, 5, 100, 250, 253, 260, 700], 'qty': [3, 6, 2, 5, 64, 2, 5]})
df['time_delta'] = df.time.diff()
 

и я хотел бы time_delta сгруппировать таким образом, чтобы все строки, в которых time_delta меньше 10, были сгруппированы вместе, time_delta столбец мог быть удален и qty суммирован.
Ожидаемый результат таков

 pd.DataFrame({'time': [1, 100, 250, 700], 'qty': [9, 2, 71, 5]})
 

В принципе, я надеюсь, что есть что-то вроде df.groupby(time_delta_func(10)).agg({'time': 'min', 'qty': 'sum'}) функции. Я читал pd.Grouper , но кажется, что группировка по времени очень строгая и основана на интервалах.

Ответ №1:

вы можете сделать это со gt значением больше, чем и cumsum создавать новую группу каждый раз, когда разница во времени превышает 10

 res = (
    df.groupby(df['time_delta'].gt(10).cumsum(), as_index=False)
      .agg({'time':'first','qty':sum})
)
print(res)
   time  qty
0     1    9
1   100    2
2   250   71
3   700    5