from collections import Counter
import pandas as pd
def aggregate_excel_files_by_mode(dataframes):
"""
Агрегирует несколько фреймов данных по модальным оценкам.
Если мода не уникальна, используется нейтральное значение (1).
"""
# Объединяем все данные в один big-dataframe
combined_dfs = pd.concat(dataframes, axis=0, ignore_index=True)
# Будем хранить итоговую таблицу
result_rows = []
# Проход по каждому столбцу отдельно
for col in combined_dfs.columns:
# Беру значения только там, где есть данные
valid_values = combined_dfs[col].dropna()
# Подсчет частот встречаемости значений
value_counts = Counter(valid_values)
# Нахожу максимальную частоту появления
max_freq = max(value_counts.values())
# Проверяю, уникальная ли мода
unique_modes = [val for val, count in value_counts.items() if count == max_freq]
# Если мода не единственная, ставим нейтральное значение (1)
if len(unique_modes) > 1:
result_rows.append((col, 1)) # Нейтральное значение
else:
result_rows.append((col, unique_modes[0])) # Уникальная мода
# Формирование итогового DataFrame
result_df = pd.DataFrame(result_rows, columns=["Column", "Value"])
result_df.set_index("Column", inplace=True)
return result_df