Примеры версий:
input_df =
| Год | неделя | Компания |
| ---- | ---- | ------- |
| 2024 | 2 | А |
| 2023 | 16 | А |
| 2023 | 12 | B |
historical_df =
| Год | неделя | Компания | Том |
| ---- | ---- | ------- | ------ |
| 2024 | 2 | А | 43 |
| 2023 | 16 | А | 32 |
| 2023 | 12 | Б | 67 |
Код: Выделить всё
def add_variability(input_df, historical_df):
variability_calcs = []
for index, row in input_df.iterrows():
filtered_historical_df = historical_df[
((historical_df['Year'] < row['Year']) |
((historical_df['Year'] == row['Year']) & (historical_df['Week'] < row['Week']))) &
(historical_df['Company'] == row['Company'])
]
filtered_historical_df = filtered_historical_df.sort_values(by=['Year', 'Week'], ascending=False)
recent_weeks = filtered_historical_df.head(16)
if recent_weeks.shape[0] > 1:
if recent_weeks['Volume'].mean() != 0:
cv = recent_weeks['Volume'].std() / recent_weeks['Volume'].mean()
else:
cv = None
else:
cv = None
variability_calcs.append(cv)
input_df['Variability'] = variability_calcs
return input_df
input_df =
| Год | неделя | Компания | Изменчивость |
| ---- | ---- | ------- | ----------- |
| 2024 | 2 | А | 0,334 |
| 2023 | 16 | А | 0,242 |
| 2023 | 12 | Б | 0,455 |
Подробнее здесь: https://stackoverflow.com/questions/789 ... ed-filteri