У меня есть фрейм данных. Выглядит это так:
prod_id prod_type timestamp1 timestamp2
1 a1 2023-12-02 2023-12-01
2 a2 2023-10-10 2023-09-02
3 a1 2023-12-11 2023-12-22
4 a3 2023-05-11 2023-06-21
.....
Мне нужно поместить prod_id в одни и те же группы (новый параметр group_id), если у них одинаковый «prod_type». А распределение дат по timestamp1 не должно превышать месяца (поэтому разница между max и min внутри group_id не должна превышать 30 дней). Аналогичным образом распределение дат в timestamp2 не должно превышать месяца (поэтому разница между максимальным и минимальным значением внутри group_id не должна превышать 30 дней). Мне нужно максимизировать среднее количество prod_id на group_id
Я пробовал это, но все равно получаю group_id с распределением дат по timestamp1 более чем на 30 дней:
# Convert timestamp columns to datetime objects
df['timestamp1'] = pd.to_datetime(df['timestamp1'])
df['timestamp2'] = pd.to_datetime(df['timestamp2'])
# Function to check if the range of dates within a group exceeds 30 days
def check_date_range(group):
if (group['timestamp1'].max() - group['timestamp1'].min()).days > 30:
return True
if (group['timestamp2'].max() - group['timestamp2'].min()).days > 30:
return True
return False
# Group by 'prod_type' and create new 'group_id' satisfying conditions
group_id = {}
current_group = 1
for _, group in df.groupby('prod_type'):
group = group.sort_values(by=['timestamp1', 'timestamp2'])
if check_date_range(group):
current_group += 1
for index, row in group.iterrows():
group_id[row['prod_id']] = current_group
# Add 'group_id' column to DataFrame
df['group_id'] = df['prod_id'].map(group_id)
Как это сделать правильно?
P.S.
# Larger Sample DataFrame
data = {
'prod_id': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
'prod_type': ['a1', 'a1', 'a1', 'a1', 'a2', 'a2', 'a2', 'a2', 'a3', 'a3', 'a3', 'a3'],
'timestamp1': ['2023-01-01', '2023-01-15', '2023-02-01', '2023-02-15',
'2023-01-10', '2023-02-05', '2023-03-01', '2023-03-20',
'2023-01-01', '2023-02-01', '2023-03-01', '2023-04-01'],
'timestamp2': ['2023-01-05', '2023-01-20', '2023-02-10', '2023-02-25',
'2023-01-15', '2023-02-10', '2023-03-05', '2023-03-25',
'2023-01-10', '2023-02-10', '2023-03-10', '2023-04-10']
}
Подробнее здесь: https://stackoverflow.com/questions/783 ... conditions
Как группировать значения на основе условий временных меток? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Интерполировать сердечные сокращения по ЭКГ на основе временных меток r-пик
Anonymous » » в форуме Python - 0 Ответы
- 17 Просмотры
-
Последнее сообщение Anonymous
-