Примечание: time_start, time_end — это дата и время, введите категориальную строку
Код: Выделить всё
buffer = dt.timedelta(minutes=15)
_temp_df = (
data.sort("time_start").select([
pl.col("*"),
((pl.col("time_start").shift(-1)) - pl.col("time_end")).fill_null(0).apply(lambda x: (dt.timedelta(seconds=x // 1000))).alias("offset"),
pl.col("type").shift(-1).alias("type_next")
]).select([
pl.col("time_start"), pl.col("time_end"), pl.col("type"),
((pl.col("offset") < buffer) & (pl.col("type") == pl.col("type_next"))).alias("can_merge")
])
).to_dicts()
_after_df = []
if len(_temp_df) != 0:
last_data = _temp_df[0]
for i in range(1, len(_temp_df)):
_dp = _temp_df[i]
if last_data['can_merge']:
last_data['time_end'] = _dp['time_end']
last_data['can_merge'] = _dp['can_merge']
else:
_after_df.append(last_data)
last_data = _dp
_after_df.append(last_data)
data = pl.from_dicts(_after_df)
Это Polars: 0.13.59
Подробнее здесь: https://stackoverflow.com/questions/732 ... ge-of-rows
Мобильная версия