ЕТ
Size: a a a
ЕТ
b
b
ЕТ
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'] # Считаем отношение
b
АМ
OB
Вторая беда, лично по моему опыту – очень плохое программирование. Здесь дело даже не в том, что человек не может реализовать какой-то более-менее сложный алгоритм, а это неумение программировать в принципе. Если человек, чтобы прочитать файл в Python, импортирует Pandas, то это странно. Однако мы начинаем с этим бороться, иначе мы вообще никого не сможем нанять.
АМ
OB
OB
АМ
M
Вторая беда, лично по моему опыту – очень плохое программирование. Здесь дело даже не в том, что человек не может реализовать какой-то более-менее сложный алгоритм, а это неумение программировать в принципе. Если человек, чтобы прочитать файл в Python, импортирует Pandas, то это странно. Однако мы начинаем с этим бороться, иначе мы вообще никого не сможем нанять.
АМ
OB
b
AR
O
temp['TimeBetween'] = temp.sort_values(['ID','Дата']).groupby('ID')['Дата'].diff()
temp['TimeBetween'] = temp['TimeBetween'].dt.days
index_of_max_date = temp.groupby('ID', sort=False)['Дата'].transform(max) == temp['Дата'] # Создаем маску, где 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_date] # Фильтруем фрейм по маске: оставляем все строки, КРОМЕ строки с максимальным Date
mean_df = exclude_max_date_rows.groupby('ID',as_index=False)['TimeBetween'].std().rename(columns={'TimeBetween':'MeanTimeBetween'}) # Считаем среднее по TimeBetween в exclude_max_date_rows
merged_df1 = mean_df.merge(max_date_rows,on='ID',how='left') # Объединяем mean_df с max_date_rows по ID
merged_df1['ОтношПослМеждЗаявкНаСредМеждПред'] = merged_df1['MaxDateTimeBetween']/merged_df1['MeanTimeBetween'] # Считаем отношение
АМ
temp['TimeBetween'] = temp.sort_values(['ID','Дата']).groupby('ID')['Дата'].diff()
temp['TimeBetween'] = temp['TimeBetween'].dt.days
index_of_max_date = temp.groupby('ID', sort=False)['Дата'].transform(max) == temp['Дата'] # Создаем маску, где 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_date] # Фильтруем фрейм по маске: оставляем все строки, КРОМЕ строки с максимальным Date
mean_df = exclude_max_date_rows.groupby('ID',as_index=False)['TimeBetween'].std().rename(columns={'TimeBetween':'MeanTimeBetween'}) # Считаем среднее по TimeBetween в exclude_max_date_rows
merged_df1 = mean_df.merge(max_date_rows,on='ID',how='left') # Объединяем mean_df с max_date_rows по ID
merged_df1['ОтношПослМеждЗаявкНаСредМеждПред'] = merged_df1['MaxDateTimeBetween']/merged_df1['MeanTimeBetween'] # Считаем отношение
ЕТ