<jupyter_start><jupyter_text>Задание 1=========Импортируйте библиотеку Pandas и дайте ей псевдоним pd.<jupyter_code>import pandas as pd<jupyter_output><empty_output><jupyter_text>Создайте датафрейм authors со столбцами author_id и author_name, в которых соответственно содержатся данные:[1, 2, 3] и ['Тургенев', 'Чехов', 'Островский'].<jupyter_code>authors = pd.DataFrame({
    'author_id': [1, 2, 3],
    'author_name': ['Тургенев', 'Чехов', 'Островский'],
})
authors<jupyter_output><empty_output><jupyter_text>Затем создайте датафрейм book cо столбцами author_id, book_title и price, в которых соответственно содержатся данные:  [1, 1, 1, 2, 2, 3, 3],['Отцы и дети', 'Рудин', 'Дворянское гнездо', 'Толстый и тонкий', 'Дама с собачкой', 'Гроза', 'Таланты и поклонники'],[450, 300, 350, 500, 450, 370, 290].<jupyter_code>book = pd.DataFrame({
    'author_id': [1, 1, 1, 2, 2, 3, 3],
    'book_title': ['Отцы и дети', 'Рудин', 'Дворянское гнездо', 'Толстый и тонкий', 'Дама с собачкой', 'Гроза', 'Таланты и поклонники'],
    'price': [450, 300, 350, 500, 450, 370, 290],
})
book<jupyter_output><empty_output><jupyter_text>Задание 2=========Получите датафрейм authors_price, соединив датафреймы authors и books по полю author_id.<jupyter_code>authors_price = pd.merge(authors, book, on='author_id', how='inner')
authors_price<jupyter_output><empty_output><jupyter_text>Задание 3=========Создайте датафрейм top5, в котором содержатся строки из authors_price с пятью самыми дорогими книгами.<jupyter_code>top5 = authors_price.sort_values(by="price", ascending=False).head(5)
top5<jupyter_output><empty_output><jupyter_text>Задание 4=========Создайте датафрейм authors_stat на основе информации из authors_price. В датафрейме authors_stat должны быть четыре столбца:author_name, min_price, max_price и mean_price,в которых должны содержаться соответственно имя автора, минимальная, максимальная и средняя цена на книги этого автора.<jupyter_code>authors_stat = pd.DataFrame({
    'min_price': authors_price.groupby("author_name")["price"].min(),
    'max_price': authors_price.groupby("author_name")["price"].max(),
    'mean_price': authors_price.groupby("author_name")["price"].mean(),
})
authors_stat<jupyter_output><empty_output><jupyter_text>Задание 5**============Создайте новый столбец в датафрейме authors_price под названием cover, в нем будут располагаться данные о том, какая обложка у данной книги - твердая или мягкая. В этот столбец поместите данные из следующего списка:['твердая', 'мягкая', 'мягкая', 'твердая', 'твердая', 'мягкая', 'мягкая'].<jupyter_code>authors_price['cover'] = ['твердая', 'мягкая', 'мягкая', 'твердая', 'твердая', 'мягкая', 'мягкая']
authors_price<jupyter_output><empty_output><jupyter_text>Просмотрите документацию по функции pd.pivot_table с помощью вопросительного знака.Для каждого автора посчитайте суммарную стоимость книг в твердой и мягкой обложке. Используйте для этого функцию pd.pivot_table. При этом столбцы должны называться "твердая" и "мягкая", а индексами должны быть фамилии авторов. Пропущенные значения стоимостей заполните нулями, при необходимости загрузите библиотеку Numpy.<jupyter_code>?pd.pivot_table
import numpy as np
book_info = pd.pivot_table(authors_price, index=['author_name'], values='price', columns=['cover'], aggfunc=np.sum).fillna(0)
book_info<jupyter_output><empty_output><jupyter_text>Назовите полученный датасет book_info и сохраните его в формат pickle под названием "book_info.pkl". Затем загрузите из этого файла датафрейм и назовите его book_info2. Удостоверьтесь, что датафреймы book_info и book_info2 идентичны.<jupyter_code>book_info.to_pickle("book_info.pkl")
book_info2 = pd.read_pickle("book_info.pkl")
book_info2.equals(book_info)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1282051282051282, 'fraction_numerical': 0.0202991452991453, 'mean_word_length': 8.002403846153847, 'pattern_counts': {'":': 0, '<': 37, '<?xml version=': 0, '>': 37, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '9', 'dir': 'jupyter-structured-clean-dedup', 'id': '452877', 'license': 'MIT', 'n_tokens_mistral': 1598, 'n_tokens_neox': 1700, 'n_words': 329, 'path': 'lesson_02/lesson_02.ipynb', 'repo_name': 'alexartwww/geekbrains-py-for-ds', 'size': '3744'}