#python #pandas
Жестко затупил на контрольном задании на курсе ЯндексПрактикум "Аналитик данных" Дана таблица: df = pd.read_csv('/datasets/music_project.csv') Задание: Утро понедельника и вечер пятницы — разная музыка или одна и та же? Ищем ответ на вопрос, какие жанры преобладают в разных городах в понедельник утром и в пятницу вечером. Есть предположение, что в понедельник утром пользователи слушают больше бодрящей музыки (например, жанра поп), а вечером пятницы — больше танцевальных (например, электронику). Получим таблицы данных по Москве moscow_general и по Санкт-Петербургу spb_general. # получение таблицы moscow_general из тех строк таблицы df, # для которых значение в столбце 'city' равно 'Moscow' moscow_general = df[df['city'] == 'Moscow'] # получение таблицы spb_general # для которых значение в столбце 'city' равно 'Saint-Petersbur' spb_general = df[df['city'] == 'Saint-Petersburg'] Создаём функцию genre_weekday(), которая возвращает список жанров по запрошенному дню недели и времени суток с такого-то часа по такой-то. def genre_weekday(df, day, time1, time2): genre_list = df[ (df['weekday'] == day) & (df['time']>time1) & (time2>df['time'])] genre_list_sorted = genre_list.groupby('genre_name')['genre_name'].count().sort_values(ascending = False).head(10) return genre_list_sorted # объявление функции genre_weekday() с параметрами df, day, time1, time2 # в переменной genre_list сохраняются те строки df, для которых одновременно: # 1) значение в столбце 'weekday' равно параметру day, # 2) значение в столбце 'time' больше time1 и # 3) меньше time2. # в переменной genre_list_sorted сохраняются в порядке убывания # первые 10 значений Series, полученной подсчётом числа значений 'genre_name' # сгруппированной по столбцу 'genre_name' таблицы genre_list # функция возвращает значение genre_list_sorted Cравниваем полученные результаты по таблице для Москвы и Санкт-Петербурга в понедельник утром (с 7 до 11) и в пятницу вечером (с 17 до 23). Утро понедельника в Москве # <вызов функции для утра понедельника в Москве (вместо df таблица moscow_general)> genre_weekday(moscow_general, 'Monday', '07:00:00', '11:00:00') Результат: genre_name pop 781 dance 549 electronic 480 rock 474 hiphop 286 ruspop 186 world 181 rusrap 175 alternative 164 classical 157 Name: genre_name, dtype: int64 Утро понедельника в СПб # <вызов функции для утра понедельника в Петербурге (вместо df таблица spb_general)> genre_weekday(spb_general, 'Monday', '07:00:00', '11:00:00') Результат: genre_name pop 218 dance 182 rock 162 electronic 147 hiphop 80 ruspop 64 alternative 58 rusrap 55 jazz 44 classical 40 Name: genre_name, dtype: int64 Вечер пятницы в Москве # <вызов функции для вечера пятницы в Москве> genre_weekday(moscow_general, 'Friday', '17:00:00', '23:00:00') Результат: genre_name pop 713 rock 517 dance 495 electronic 482 hiphop 273 world 208 ruspop 170 alternative 163 classical 163 rusrap 142 Name: genre_name, dtype: int64 Вечер пятницы в СПб # <вызов функции для вечера пятницы в Питере> genre_weekday(spb_general, 'Friday', '17:00:00', '23:00:00') Результат: genre_name pop 256 rock 216 electronic 216 dance 210 hiphop 97 alternative 63 jazz 61 classical 60 rusrap 59 world 54 Name: genre_name, dtype: int64 Популярные жанры в понедельник утром в Питере и Москве оказались похожи: везде, как и предполагалось, популярен поп. Несмотря на это, концовка топ-10 для двух городов различается: в Питере в топ-10 входит джаз и русский рэп, а в Москве жанр world. В конце недели ситуация не меняется. Поп-музыка всё так же на первом месте. Опять разница заметна только в концовке топ-10, где в Питере пятничным вечером тоже присутствует жанр world Конец задания Вроде все сходится с написанными Яндексом подсказками и выводами, но при сдаче задания на проверку дает ошибку The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). Суть ошибки вроде бы понял, но не понимаю в какой момент она возникает. Если это может помочь, ссылка на диск со всеми заданиями. cell In [48]: https://yadi.sk/d/xO0cm83NXVyPJA
Ответы
Ответ 1
Возможно, проблема в этой строке: genre_list = df[ (df['weekday'] == day) & (df['time']>time1) & (time2>df['time'])] Попробуйте заменить на какой-нибудь из этих вариантов: genre_list = df.query('weekday == @day and @time2 > time > @time1') genre_list = df.loc[(df['weekday'] == day) & (df['time'].between(time1, time2, inclusive=False))]Ответ 2
У меня валидатор принял такой вариант: genre_list = df[ (df['weekday'] == day) & (df['time'] > time1) & (df['time'] < time2)] возможно ему важно в каком порядке идут сравниваемые величины..
Комментариев нет:
Отправить комментарий