#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