Как сгруппировать строки в наборе данных по двум размерам меток времени?Python

Программы на Python
Anonymous
Как сгруппировать строки в наборе данных по двум размерам меток времени?

Сообщение Anonymous »

У меня есть кадр данных с двумя временными метками:
timestamp1 timestamp2
2022-02-18 2023-01-02
2022-02-19 2023-01-04
2022-02-21 2023-01-11
2022-03-11 2024-02-05
2022-03-12 2024-02-06
2022-03-30 2024-02-07

Я хочу сгруппировать их (создать новую группу параметров) по диапазонам временных меток. в каждой временной метке группы диапазон дат не должен превышать 4 дней (поэтому разница между максимальным и минимальным значениями внутри группы не должна превышать 4 дней). поэтому желаемый результат может быть таким:
timestamp1 timestamp2 group
2022-02-18 2023-01-02 1
2022-02-19 2023-01-04 1
2022-02-21 2023-01-11 2
2022-03-11 2024-02-05 3
2022-03-12 2024-02-06 3
2022-03-30 2024-02-07 4

как вы видите, в третьей строке нет группы 1, поскольку временная метка2 — 11 января 2023 г. (на 9 дней больше, чем наименьшая временная метка2 в группе 1). и последняя строка не входит в группу 3, поскольку ее временная метка1 на 19 дней больше, чем минимальная временная метка1 в группе 1.
Цель состоит в том, чтобы в каждой группе было как можно больше строк с ограничениями, упомянутыми ранее
p>
Как это сделать? Я попробовал это, но это не дало желаемых результатов, особенно на больших наборах данных:
import pandas as pd

# Sample DataFrame
data = {
'timestamp1': ['2022-02-18', '2022-02-19', '2022-02-21', '2022-03-11', '2022-03-12', '2022-03-30'],
'timestamp2': ['2023-01-02', '2023-01-04', '2023-01-11', '2024-02-05', '2024-02-06', '2024-02-07']
}
df = pd.DataFrame(data)
df['timestamp1'] = pd.to_datetime(df['timestamp1'])
df['timestamp2'] = pd.to_datetime(df['timestamp2'])

# Function to assign groups
def assign_groups(df):
groups = []
current_group = 1
start_timestamp2 = df.iloc[0]['timestamp2']
for i, row in df.iterrows():
if (row['timestamp2'] - start_timestamp2).days > 4:
current_group += 1
start_timestamp2 = row['timestamp2']
groups.append(current_group)
return groups

# Assign groups
df['group'] = assign_groups(df)


Подробнее здесь: https://stackoverflow.com/questions/783 ... rage-sizes

Вернуться в «Python»