diff --git a/lab_sql_pyth.ipynb b/lab_sql_pyth.ipynb new file mode 100644 index 0000000..6f0f9d5 --- /dev/null +++ b/lab_sql_pyth.ipynb @@ -0,0 +1,1253 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "e92ba991", + "metadata": {}, + "source": [ + "Challenge\n", + "1. Establish a connection between Python and the Sakila database." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "beb9f4cb", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: sqlalchemy in /opt/anaconda3/lib/python3.13/site-packages (2.0.43)\n", + "Requirement already satisfied: typing-extensions>=4.6.0 in /opt/anaconda3/lib/python3.13/site-packages (from sqlalchemy) (4.15.0)\n" + ] + } + ], + "source": [ + "!pip install sqlalchemy" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "b887080d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: pymysql in /opt/anaconda3/lib/python3.13/site-packages (1.2.0)\n" + ] + } + ], + "source": [ + "!pip install pymysql" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "641596cd", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Version: 2.0.43\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "pip show sqlalchemy | grep Version" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "59f51102", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import pymysql\n", + "from sqlalchemy import create_engine\n", + "import getpass # To get the password without showing the input\n", + "password = getpass.getpass()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "da1915e9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Engine(mysql+pymysql://root:***@localhost/sakila)" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bd = \"sakila\"\n", + "connection_string = 'mysql+pymysql://root:' + password + '@localhost/'+bd\n", + "engine = create_engine(connection_string)\n", + "engine" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "97db5874", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('sakila',)\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sqlalchemy import text\n", + "\n", + "with engine.connect() as connection:\n", + " result = connection.execute(text(\"SELECT DATABASE();\"))\n", + " print(result.fetchone())\n", + "\n", + "result" + ] + }, + { + "cell_type": "markdown", + "id": "c32e9b87", + "metadata": {}, + "source": [ + "2. Write a Python function called rentals_month that retrieves rental data for a given month and year (passed as parameters) from the Sakila database as a Pandas DataFrame. The function should take in three parameters:\n", + "\n", + "engine: an object representing the database connection engine to be used to establish a connection to the Sakila database.\n", + "\n", + "month: an integer representing the month for which rental data is to be retrieved.\n", + "\n", + "year: an integer representing the year for which rental data is to be retrieved.\n", + "\n", + "The function should execute a SQL query to retrieve the rental data for the specified month and year from the rental table in the Sakila database, and return it as a pandas DataFrame." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "7745d7b4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(1, datetime.datetime(2005, 5, 24, 22, 53, 30), 367, 130, datetime.datetime(2005, 5, 26, 22, 4, 30), 1, datetime.datetime(2006, 2, 15, 21, 30, 53))" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "with engine.connect() as connection:\n", + " result = connection.execute(text(\"SELECT * FROM rental;\"))\n", + "\n", + "result.first()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "6e3c1c03", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "result" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "096b4870", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'rental_id': 1, 'rental_date': datetime.datetime(2005, 5, 24, 22, 53, 30), 'inventory_id': 367, 'customer_id': 130, 'return_date': datetime.datetime(2005, 5, 26, 22, 4, 30), 'staff_id': 1, 'last_update': datetime.datetime(2006, 2, 15, 21, 30, 53)}" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "with engine.connect() as connection:\n", + " result = connection.execute(text(\"SELECT * FROM rental;\"))\n", + " row = result.first()\n", + "\n", + "row._mapping" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "5eb96f09", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
rental_idrental_dateinventory_idcustomer_idreturn_datestaff_idlast_update
012005-05-24 22:53:303671302005-05-26 22:04:3012006-02-15 21:30:53
122005-05-24 22:54:3315254592005-05-28 19:40:3312006-02-15 21:30:53
232005-05-24 23:03:3917114082005-06-01 22:12:3912006-02-15 21:30:53
342005-05-24 23:04:4124523332005-06-03 01:43:4122006-02-15 21:30:53
452005-05-24 23:05:2120792222005-06-02 04:33:2112006-02-15 21:30:53
........................
16039160452005-08-23 22:25:26772142005-08-25 23:54:2612006-02-15 21:30:53
16040160462005-08-23 22:26:474364742005-08-27 18:02:4722006-02-15 21:30:53
16041160472005-08-23 22:42:4820881142005-08-25 02:48:4822006-02-15 21:30:53
16042160482005-08-23 22:43:0720191032005-08-31 21:33:0712006-02-15 21:30:53
16043160492005-08-23 22:50:1226663932005-08-30 01:01:1222006-02-15 21:30:53
\n", + "

16044 rows × 7 columns

\n", + "
" + ], + "text/plain": [ + " rental_id rental_date inventory_id customer_id \\\n", + "0 1 2005-05-24 22:53:30 367 130 \n", + "1 2 2005-05-24 22:54:33 1525 459 \n", + "2 3 2005-05-24 23:03:39 1711 408 \n", + "3 4 2005-05-24 23:04:41 2452 333 \n", + "4 5 2005-05-24 23:05:21 2079 222 \n", + "... ... ... ... ... \n", + "16039 16045 2005-08-23 22:25:26 772 14 \n", + "16040 16046 2005-08-23 22:26:47 4364 74 \n", + "16041 16047 2005-08-23 22:42:48 2088 114 \n", + "16042 16048 2005-08-23 22:43:07 2019 103 \n", + "16043 16049 2005-08-23 22:50:12 2666 393 \n", + "\n", + " return_date staff_id last_update \n", + "0 2005-05-26 22:04:30 1 2006-02-15 21:30:53 \n", + "1 2005-05-28 19:40:33 1 2006-02-15 21:30:53 \n", + "2 2005-06-01 22:12:39 1 2006-02-15 21:30:53 \n", + "3 2005-06-03 01:43:41 2 2006-02-15 21:30:53 \n", + "4 2005-06-02 04:33:21 1 2006-02-15 21:30:53 \n", + "... ... ... ... \n", + "16039 2005-08-25 23:54:26 1 2006-02-15 21:30:53 \n", + "16040 2005-08-27 18:02:47 2 2006-02-15 21:30:53 \n", + "16041 2005-08-25 02:48:48 2 2006-02-15 21:30:53 \n", + "16042 2005-08-31 21:33:07 1 2006-02-15 21:30:53 \n", + "16043 2005-08-30 01:01:12 2 2006-02-15 21:30:53 \n", + "\n", + "[16044 rows x 7 columns]" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "with engine.connect() as connection:\n", + " query = text('SELECT * FROM rental')\n", + " result = connection.execute(query)\n", + " df = pd.DataFrame(result.all())\n", + "\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "08ee12fe", + "metadata": {}, + "outputs": [], + "source": [ + "def rentals_month(engine, month, year):\n", + " query = f'''SELECT * FROM rental\n", + " WHERE MONTH(rental_date) = {month}\n", + " AND YEAR(rental_date) = {year};'''\n", + " df = pd.read_sql(query, engine)\n", + "\n", + " return df" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "2495197f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
rental_idrental_dateinventory_idcustomer_idreturn_datestaff_idlast_update
0101812005-08-01 00:00:4431111132005-08-04 19:33:4412006-02-15 21:30:53
1101822005-08-01 00:08:0141125782005-08-09 18:14:0122006-02-15 21:30:53
2101832005-08-01 00:08:0143193772005-08-09 20:41:0112006-02-15 21:30:53
3101842005-08-01 00:09:332785772005-08-05 04:12:3322006-02-15 21:30:53
4101852005-08-01 00:12:111266642005-08-03 03:03:1112006-02-15 21:30:53
........................
5681160452005-08-23 22:25:26772142005-08-25 23:54:2612006-02-15 21:30:53
5682160462005-08-23 22:26:474364742005-08-27 18:02:4722006-02-15 21:30:53
5683160472005-08-23 22:42:4820881142005-08-25 02:48:4822006-02-15 21:30:53
5684160482005-08-23 22:43:0720191032005-08-31 21:33:0712006-02-15 21:30:53
5685160492005-08-23 22:50:1226663932005-08-30 01:01:1222006-02-15 21:30:53
\n", + "

5686 rows × 7 columns

\n", + "
" + ], + "text/plain": [ + " rental_id rental_date inventory_id customer_id \\\n", + "0 10181 2005-08-01 00:00:44 3111 113 \n", + "1 10182 2005-08-01 00:08:01 4112 578 \n", + "2 10183 2005-08-01 00:08:01 4319 377 \n", + "3 10184 2005-08-01 00:09:33 2785 77 \n", + "4 10185 2005-08-01 00:12:11 1266 64 \n", + "... ... ... ... ... \n", + "5681 16045 2005-08-23 22:25:26 772 14 \n", + "5682 16046 2005-08-23 22:26:47 4364 74 \n", + "5683 16047 2005-08-23 22:42:48 2088 114 \n", + "5684 16048 2005-08-23 22:43:07 2019 103 \n", + "5685 16049 2005-08-23 22:50:12 2666 393 \n", + "\n", + " return_date staff_id last_update \n", + "0 2005-08-04 19:33:44 1 2006-02-15 21:30:53 \n", + "1 2005-08-09 18:14:01 2 2006-02-15 21:30:53 \n", + "2 2005-08-09 20:41:01 1 2006-02-15 21:30:53 \n", + "3 2005-08-05 04:12:33 2 2006-02-15 21:30:53 \n", + "4 2005-08-03 03:03:11 1 2006-02-15 21:30:53 \n", + "... ... ... ... \n", + "5681 2005-08-25 23:54:26 1 2006-02-15 21:30:53 \n", + "5682 2005-08-27 18:02:47 2 2006-02-15 21:30:53 \n", + "5683 2005-08-25 02:48:48 2 2006-02-15 21:30:53 \n", + "5684 2005-08-31 21:33:07 1 2006-02-15 21:30:53 \n", + "5685 2005-08-30 01:01:12 2 2006-02-15 21:30:53 \n", + "\n", + "[5686 rows x 7 columns]" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "august = rentals_month(engine, 8, 2005)\n", + "august" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "52873080", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
rental_idrental_dateinventory_idcustomer_idreturn_datestaff_idlast_update
012005-05-24 22:53:303671302005-05-26 22:04:3012006-02-15 21:30:53
122005-05-24 22:54:3315254592005-05-28 19:40:3312006-02-15 21:30:53
232005-05-24 23:03:3917114082005-06-01 22:12:3912006-02-15 21:30:53
342005-05-24 23:04:4124523332005-06-03 01:43:4122006-02-15 21:30:53
452005-05-24 23:05:2120792222005-06-02 04:33:2112006-02-15 21:30:53
\n", + "
" + ], + "text/plain": [ + " rental_id rental_date inventory_id customer_id \\\n", + "0 1 2005-05-24 22:53:30 367 130 \n", + "1 2 2005-05-24 22:54:33 1525 459 \n", + "2 3 2005-05-24 23:03:39 1711 408 \n", + "3 4 2005-05-24 23:04:41 2452 333 \n", + "4 5 2005-05-24 23:05:21 2079 222 \n", + "\n", + " return_date staff_id last_update \n", + "0 2005-05-26 22:04:30 1 2006-02-15 21:30:53 \n", + "1 2005-05-28 19:40:33 1 2006-02-15 21:30:53 \n", + "2 2005-06-01 22:12:39 1 2006-02-15 21:30:53 \n", + "3 2005-06-03 01:43:41 2 2006-02-15 21:30:53 \n", + "4 2005-06-02 04:33:21 1 2006-02-15 21:30:53 " + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "may = rentals_month(engine, 5, 2005)\n", + "may.head()" + ] + }, + { + "cell_type": "markdown", + "id": "e41e673f", + "metadata": {}, + "source": [ + "3. Develop a Python function called rental_count_month that takes the DataFrame provided by rentals_month as input along with the month and year and returns a new DataFrame containing the number of rentals made by each customer_id during the selected month and year.\n", + "\n", + "The function should also include the month and year as parameters and use them to name the new column according to the month and year, for example, if the input month is 05 and the year is 2005, the column name should be \"rentals_05_2005\".\n", + "\n", + "Hint: Consider making use of pandas groupby()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "f06b8809", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
rental_idrental_dateinventory_idcustomer_idreturn_datestaff_idlast_update
0101812005-08-01 00:00:4431111132005-08-04 19:33:4412006-02-15 21:30:53
1101822005-08-01 00:08:0141125782005-08-09 18:14:0122006-02-15 21:30:53
2101832005-08-01 00:08:0143193772005-08-09 20:41:0112006-02-15 21:30:53
3101842005-08-01 00:09:332785772005-08-05 04:12:3322006-02-15 21:30:53
4101852005-08-01 00:12:111266642005-08-03 03:03:1112006-02-15 21:30:53
\n", + "
" + ], + "text/plain": [ + " rental_id rental_date inventory_id customer_id \\\n", + "0 10181 2005-08-01 00:00:44 3111 113 \n", + "1 10182 2005-08-01 00:08:01 4112 578 \n", + "2 10183 2005-08-01 00:08:01 4319 377 \n", + "3 10184 2005-08-01 00:09:33 2785 77 \n", + "4 10185 2005-08-01 00:12:11 1266 64 \n", + "\n", + " return_date staff_id last_update \n", + "0 2005-08-04 19:33:44 1 2006-02-15 21:30:53 \n", + "1 2005-08-09 18:14:01 2 2006-02-15 21:30:53 \n", + "2 2005-08-09 20:41:01 1 2006-02-15 21:30:53 \n", + "3 2005-08-05 04:12:33 2 2006-02-15 21:30:53 \n", + "4 2005-08-03 03:03:11 1 2006-02-15 21:30:53 " + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "august.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "cdb019d1", + "metadata": {}, + "outputs": [], + "source": [ + "def rental_count_month(df, month, year):\n", + " column_name = f\"rentals_{month:02d}_{year}\"\n", + " rental_count = (\n", + " df.groupby(\"customer_id\")\n", + " .size()\n", + " .reset_index(name=column_name)\n", + " )\n", + "\n", + " return rental_count" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "96943390", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
customer_idrentals_08_2005
0111
1211
237
3411
4513
\n", + "
" + ], + "text/plain": [ + " customer_id rentals_08_2005\n", + "0 1 11\n", + "1 2 11\n", + "2 3 7\n", + "3 4 11\n", + "4 5 13" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "august_count = rental_count_month(august, 8, 2005)\n", + "\n", + "august_count.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "28d6d7d8", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
customer_idrentals_05_2005
012
121
232
353
463
\n", + "
" + ], + "text/plain": [ + " customer_id rentals_05_2005\n", + "0 1 2\n", + "1 2 1\n", + "2 3 2\n", + "3 5 3\n", + "4 6 3" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "may_count = rental_count_month(may, 5, 2005)\n", + "\n", + "may_count.head()" + ] + }, + { + "cell_type": "markdown", + "id": "a68856f4", + "metadata": {}, + "source": [ + "4. Create a Python function called compare_rentals that takes two DataFrames as input containing the number of rentals made by each customer in different months and years. The function should return a combined DataFrame with a new 'difference' column, which is the difference between the number of rentals in the two months." + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "a68e0460", + "metadata": {}, + "outputs": [], + "source": [ + "def compare_rental(df1, df2):\n", + " new_df = pd.merge(df1, df2, on=\"customer_id\")\n", + " \n", + " col1 = new_df.columns[1]\n", + " col2 = new_df.columns[2]\n", + "\n", + " new_df[\"difference\"] = new_df[col2] - new_df[col1]\n", + " \n", + " return new_df\n" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "f5da65cf", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
customer_idrentals_05_2005rentals_08_2005difference
012119
1211110
23275
3531310
463129
...............
51559443-1
516595187
5175966137
51859721210
519599176
\n", + "

520 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " customer_id rentals_05_2005 rentals_08_2005 difference\n", + "0 1 2 11 9\n", + "1 2 1 11 10\n", + "2 3 2 7 5\n", + "3 5 3 13 10\n", + "4 6 3 12 9\n", + ".. ... ... ... ...\n", + "515 594 4 3 -1\n", + "516 595 1 8 7\n", + "517 596 6 13 7\n", + "518 597 2 12 10\n", + "519 599 1 7 6\n", + "\n", + "[520 rows x 4 columns]" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "compare_rental(may_count, august_count)" + ] + }, + { + "cell_type": "markdown", + "id": "a04ebce4", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.13.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}