YP
Size: a a a
YP
YP
YP
P
YP
O
O
AT
АМ
index_of_max_date = temp.groupby('ID', sort=False)['Date'].transform(max) == temp['Date'] # Создаем маску, где True будет соответствовать строкам с максимальным Date
max_date_rows = temp[index_of_max_date][['ID','TimeBetween']].rename(columns={'TimeBetween':'MaxDateTimeBetween'}) # Фильтруем фрейм по маске: оставляем только строки с максимальным Date
exclude_max_date_rows = temp[~index_of_max_values] # Фильтруем фрейм по маске: оставляем все строки, КРОМЕ строки с максимальным Date
mean_df = exclude_max_date_rows.groupby('ID',as_index=False)['TimeBetween'].mean().rename(columns={'TimeBetween':'MeanTimeBetween'}) # Считаем среднее по TimeBetween в exclude_max_date_rows
merged_df = mean_df.merge(max_date_rows,on='ID',how='left') # Объединяем mean_df с max_date_rows по ID
merged_df['Ratio'] = merged_df['MaxDateTimeBetween']/merged_df['MeanTimeBetween'] # Считаем отношение
АМ
O
index_of_max_date = temp.groupby('ID', sort=False)['Date'].transform(max) == temp['Date'] # Создаем маску, где True будет соответствовать строкам с максимальным Date
max_date_rows = temp[index_of_max_date][['ID','TimeBetween']].rename(columns={'TimeBetween':'MaxDateTimeBetween'}) # Фильтруем фрейм по маске: оставляем только строки с максимальным Date
exclude_max_date_rows = temp[~index_of_max_values] # Фильтруем фрейм по маске: оставляем все строки, КРОМЕ строки с максимальным Date
mean_df = exclude_max_date_rows.groupby('ID',as_index=False)['TimeBetween'].mean().rename(columns={'TimeBetween':'MeanTimeBetween'}) # Считаем среднее по TimeBetween в exclude_max_date_rows
merged_df = mean_df.merge(max_date_rows,on='ID',how='left') # Объединяем mean_df с max_date_rows по ID
merged_df['Ratio'] = merged_df['MaxDateTimeBetween']/merged_df['MeanTimeBetween'] # Считаем отношение
VN
OB
VN
OB
VN
AR
VN
AR