Я действительно надеюсь, что кто-то может помочь с этим, это работало, но теперь это внезапно не так, и я не могу понять, почему. Рассмотрим следующее:
def generate_mode(option):
averages_text.delete('1.0', tk.END)
if option == 'Large Airport':
df = data.query('type_airport_large_airport == 1')
mode = df.groupby('type_airport_large_airport')['frequency_mhz'].agg(pd.Series.mode)
averages_text.insert('1.0', 'The mode for large airport is {}'.format(mode.iat[0]))
elif option == 'Frequency':
freq_data = data.query('frequency_mhz > 100')
mode = freq_data['frequency_mhz'].mode()
averages_text.insert('1.0', 'The mode for frequency over 100mhz is {}'.format(mode.iat[0]))
Эта строка:
mode = df.groupby('type_airport_large_airport')['frequency_mhz'].agg(pd.Series.mode)
Выдает ошибку:
ValueError: Must produce aggregated value
если я изменю параметр на .agg(pd.Series.median), он будет работать нормально.
Кто-нибудь может увидеть, что может происходить?
Как указал Борис, pd.Series.mode()
всегда возвращает pd.Series
(что-то вроде индексированного списка). Обходной путь для этого будет:
df.groupby('type_airport_large_airport')['frequency_mhz'].agg(lambda x: pd.Series.mode(x)[0])
для захвата первого элемента возвращаемых значений (первый режим). При использовании этого подхода важно иметь в виду, что PD.Series.mode()
возвращает все элементы, когда нет режима (поэтому мы все равно захватим первое значение), а если есть два или более режимов, он покажет только первый.
pd.Series.mode()
всегда возвращаетpd.Series
, поскольку возможно несколько режимов.agg()
метод ожидает некоторое значение (int, str, ...)