diff --git a/examples/notebooks/Pivoting Data from Wide to Long.ipynb b/examples/notebooks/Pivoting Data from Wide to Long.ipynb
index 1d202e078..404de3df0 100644
--- a/examples/notebooks/Pivoting Data from Wide to Long.ipynb
+++ b/examples/notebooks/Pivoting Data from Wide to Long.ipynb
@@ -16,7 +16,7 @@
"import re\n",
"\n",
"import numpy as np\n",
- "import pandas as pd"
+ "import pandas as pd\n"
]
},
{
@@ -125,18 +125,18 @@
],
"source": [
"df = pd.DataFrame(\n",
- " {\n",
- " \"id\": [1, 2, 3],\n",
- " \"M_start_date_1\": [201709, 201709, 201709],\n",
- " \"M_end_date_1\": [201905, 201905, 201905],\n",
- " \"M_start_date_2\": [202004, 202004, 202004],\n",
- " \"M_end_date_2\": [202005, 202005, 202005],\n",
- " \"F_start_date_1\": [201803, 201803, 201803],\n",
- " \"F_end_date_1\": [201904, 201904, 201904],\n",
- " \"F_start_date_2\": [201912, 201912, 201912],\n",
- " \"F_end_date_2\": [202007, 202007, 202007],\n",
- " }\n",
- " )\n",
+ " {\n",
+ " \"id\": [1, 2, 3],\n",
+ " \"M_start_date_1\": [201709, 201709, 201709],\n",
+ " \"M_end_date_1\": [201905, 201905, 201905],\n",
+ " \"M_start_date_2\": [202004, 202004, 202004],\n",
+ " \"M_end_date_2\": [202005, 202005, 202005],\n",
+ " \"F_start_date_1\": [201803, 201803, 201803],\n",
+ " \"F_end_date_1\": [201904, 201904, 201904],\n",
+ " \"F_start_date_2\": [201912, 201912, 201912],\n",
+ " \"F_end_date_2\": [202007, 202007, 202007],\n",
+ " }\n",
+ ")\n",
"\n",
"df"
]
@@ -291,14 +291,16 @@
}
],
"source": [
- "df1 = df.set_index('id')\n",
- "df1.columns = df1.columns.str.split('_', expand=True)\n",
- "df1 = (df1.stack(level=[0,2,3])\n",
- " .sort_index(level=[0,1], ascending=[True, False])\n",
- " .reset_index(level=[2,3], drop=True)\n",
- " .sort_index(axis=1, ascending=False)\n",
- " .rename_axis(['id','cod'])\n",
- " .reset_index())\n",
+ "df1 = df.set_index(\"id\")\n",
+ "df1.columns = df1.columns.str.split(\"_\", expand=True)\n",
+ "df1 = (\n",
+ " df1.stack(level=[0, 2, 3], future_stack=True)\n",
+ " .sort_index(level=[0, 1], ascending=[True, False])\n",
+ " .reset_index(level=[2, 3], drop=True)\n",
+ " .sort_index(axis=1, ascending=False)\n",
+ " .rename_axis([\"id\", \"cod\"])\n",
+ " .reset_index()\n",
+ ")\n",
"\n",
"df1"
]
@@ -337,34 +339,133 @@
"
\n",
" | \n",
" id | \n",
- " cod | \n",
- " start | \n",
- " end | \n",
+ " M_start_date_1 | \n",
+ " M_end_date_1 | \n",
+ " M_start_date_2 | \n",
+ " M_end_date_2 | \n",
+ " F_start_date_1 | \n",
+ " F_end_date_1 | \n",
+ " F_start_date_2 | \n",
+ " F_end_date_2 | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1 | \n",
- " M | \n",
" 201709 | \n",
" 201905 | \n",
+ " 202004 | \n",
+ " 202005 | \n",
+ " 201803 | \n",
+ " 201904 | \n",
+ " 201912 | \n",
+ " 202007 | \n",
"
\n",
" \n",
" 1 | \n",
- " 1 | \n",
- " F | \n",
+ " 2 | \n",
+ " 201709 | \n",
+ " 201905 | \n",
+ " 202004 | \n",
+ " 202005 | \n",
" 201803 | \n",
" 201904 | \n",
+ " 201912 | \n",
+ " 202007 | \n",
"
\n",
" \n",
" 2 | \n",
+ " 3 | \n",
+ " 201709 | \n",
+ " 201905 | \n",
+ " 202004 | \n",
+ " 202005 | \n",
+ " 201803 | \n",
+ " 201904 | \n",
+ " 201912 | \n",
+ " 202007 | \n",
+ "
\n",
+ " \n",
+ "\n",
+ ""
+ ],
+ "text/plain": [
+ " id M_start_date_1 M_end_date_1 M_start_date_2 M_end_date_2 \\\n",
+ "0 1 201709 201905 202004 202005 \n",
+ "1 2 201709 201905 202004 202005 \n",
+ "2 3 201709 201905 202004 202005 \n",
+ "\n",
+ " F_start_date_1 F_end_date_1 F_start_date_2 F_end_date_2 \n",
+ "0 201803 201904 201912 202007 \n",
+ "1 201803 201904 201912 202007 \n",
+ "2 201803 201904 201912 202007 "
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " id | \n",
+ " cod | \n",
+ " start | \n",
+ " end | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 1 | \n",
+ " M | \n",
+ " 201709 | \n",
+ " 201905 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
" 1 | \n",
" M | \n",
" 202004 | \n",
" 202005 | \n",
"
\n",
" \n",
+ " 2 | \n",
+ " 1 | \n",
+ " F | \n",
+ " 201803 | \n",
+ " 201904 | \n",
+ "
\n",
+ " \n",
" 3 | \n",
" 1 | \n",
" F | \n",
@@ -381,16 +482,16 @@
"
\n",
" 5 | \n",
" 2 | \n",
- " F | \n",
- " 201803 | \n",
- " 201904 | \n",
+ " M | \n",
+ " 202004 | \n",
+ " 202005 | \n",
"
\n",
" \n",
" 6 | \n",
" 2 | \n",
- " M | \n",
- " 202004 | \n",
- " 202005 | \n",
+ " F | \n",
+ " 201803 | \n",
+ " 201904 | \n",
"
\n",
" \n",
" 7 | \n",
@@ -409,16 +510,16 @@
"
\n",
" 9 | \n",
" 3 | \n",
- " F | \n",
- " 201803 | \n",
- " 201904 | \n",
+ " M | \n",
+ " 202004 | \n",
+ " 202005 | \n",
"
\n",
" \n",
" 10 | \n",
" 3 | \n",
- " M | \n",
- " 202004 | \n",
- " 202005 | \n",
+ " F | \n",
+ " 201803 | \n",
+ " 201904 | \n",
"
\n",
" \n",
" 11 | \n",
@@ -434,41 +535,39 @@
"text/plain": [
" id cod start end\n",
"0 1 M 201709 201905\n",
- "1 1 F 201803 201904\n",
- "2 1 M 202004 202005\n",
+ "1 1 M 202004 202005\n",
+ "2 1 F 201803 201904\n",
"3 1 F 201912 202007\n",
"4 2 M 201709 201905\n",
- "5 2 F 201803 201904\n",
- "6 2 M 202004 202005\n",
+ "5 2 M 202004 202005\n",
+ "6 2 F 201803 201904\n",
"7 2 F 201912 202007\n",
"8 3 M 201709 201905\n",
- "9 3 F 201803 201904\n",
- "10 3 M 202004 202005\n",
+ "9 3 M 202004 202005\n",
+ "10 3 F 201803 201904\n",
"11 3 F 201912 202007"
]
},
- "execution_count": 4,
+ "execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "result = (df.pivot_longer(index=\"id\", \n",
- " names_to=(\"cod\", \".value\", \"date\"), \n",
- " names_pattern=\"(M|F)_(start|end)_(date).+\", \n",
- " sort_by_appearance=True)\n",
- " .drop(columns = 'date')\n",
- " )\n",
+ "result = df.pivot_longer(\n",
+ " index=\"id\",\n",
+ " names_to=(\"cod\", \".value\", \"date\", \"num\"),\n",
+ " names_sep=\"_\",\n",
+ " sort_by_appearance=True,\n",
+ ").drop(columns=[\"date\", \"num\"])\n",
"\n",
- " \n",
- " \n",
"\n",
"result"
]
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": 6,
"metadata": {},
"outputs": [
{
@@ -477,15 +576,15 @@
"True"
]
},
- "execution_count": 5,
+ "execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "columns = ['id', 'cod', 'start', 'end']\n",
- "df1 = df1.sort_values(columns, ignore_index = True)\n",
- "result = result.sort_values(columns, ignore_index = True)\n",
+ "columns = [\"id\", \"cod\", \"start\", \"end\"]\n",
+ "df1 = df1.sort_values(columns, ignore_index=True)\n",
+ "result = result.sort_values(columns, ignore_index=True)\n",
"df1.equals(result)"
]
},
@@ -507,7 +606,7 @@
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": 7,
"metadata": {},
"outputs": [
{
@@ -564,26 +663,30 @@
" B Mary Bo 6.0 150"
]
},
- "execution_count": 6,
+ "execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "index = pd.MultiIndex.from_tuples([('person', 'A'), ('person', 'B')])\n",
+ "index = pd.MultiIndex.from_tuples([(\"person\", \"A\"), (\"person\", \"B\")])\n",
+ "\n",
+ "df = pd.DataFrame(\n",
+ " {\n",
+ " \"first\": [\"John\", \"Mary\"],\n",
+ " \"last\": [\"Doe\", \"Bo\"],\n",
+ " \"height\": [5.5, 6.0],\n",
+ " \"weight\": [130, 150],\n",
+ " },\n",
+ " index=index,\n",
+ ")\n",
"\n",
- "df = pd.DataFrame({'first': ['John', 'Mary'],\n",
- " 'last': ['Doe', 'Bo'],\n",
- " 'height': [5.5, 6.0],\n",
- " 'weight': [130, 150]},\n",
- " index=index)\n",
- " \n",
"df"
]
},
{
"cell_type": "code",
- "execution_count": 7,
+ "execution_count": 8,
"metadata": {},
"outputs": [
{
@@ -654,13 +757,13 @@
"3 Mary Bo weight 150.0"
]
},
- "execution_count": 7,
+ "execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "df.pivot_longer(index=['first','last'])"
+ "df.pivot_longer(index=[\"first\", \"last\"])"
]
},
{
@@ -672,7 +775,7 @@
},
{
"cell_type": "code",
- "execution_count": 8,
+ "execution_count": 9,
"metadata": {},
"outputs": [
{
@@ -743,16 +846,13 @@
"3 Mary Bo weight 150.0"
]
},
- "execution_count": 8,
+ "execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "df.pivot_longer(\n",
- " index=['first','last'],\n",
- " sort_by_appearance = True\n",
- " )"
+ "df.pivot_longer(index=[\"first\", \"last\"], sort_by_appearance=True)"
]
},
{
@@ -764,7 +864,7 @@
},
{
"cell_type": "code",
- "execution_count": 9,
+ "execution_count": 10,
"metadata": {},
"outputs": [
{
@@ -837,16 +937,13 @@
" B Mary Bo weight 150.0"
]
},
- "execution_count": 9,
+ "execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "df.pivot_longer(\n",
- " index=['first','last'],\n",
- " ignore_index = False\n",
- " )"
+ "df.pivot_longer(index=[\"first\", \"last\"], ignore_index=False)"
]
},
{
@@ -860,7 +957,7 @@
},
{
"cell_type": "code",
- "execution_count": 10,
+ "execution_count": 11,
"metadata": {},
"outputs": [
{
@@ -926,23 +1023,27 @@
"2 c 5 6"
]
},
- "execution_count": 10,
+ "execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "df = pd.DataFrame({'A': {0: 'a', 1: 'b', 2: 'c'},\n",
- " 'B': {0: 1, 1: 3, 2: 5},\n",
- " 'C': {0: 2, 1: 4, 2: 6}})\n",
- "df.columns = [list('ABC'), list('DEF')]\n",
+ "df = pd.DataFrame(\n",
+ " {\n",
+ " \"A\": {0: \"a\", 1: \"b\", 2: \"c\"},\n",
+ " \"B\": {0: 1, 1: 3, 2: 5},\n",
+ " \"C\": {0: 2, 1: 4, 2: 6},\n",
+ " }\n",
+ ")\n",
+ "df.columns = [list(\"ABC\"), list(\"DEF\")]\n",
"\n",
"df"
]
},
{
"cell_type": "code",
- "execution_count": 11,
+ "execution_count": 12,
"metadata": {},
"outputs": [
{
@@ -1029,21 +1130,18 @@
"5 c C F 6"
]
},
- "execution_count": 11,
+ "execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "df.pivot_longer(\n",
- " index = [(\"A\", \"D\")],\n",
- " values_to = \"num\"\n",
- ")"
+ "df.pivot_longer(index=[(\"A\", \"D\")], values_to=\"num\")"
]
},
{
"cell_type": "code",
- "execution_count": 12,
+ "execution_count": 13,
"metadata": {},
"outputs": [
{
@@ -1106,16 +1204,13 @@
"2 c B E 5"
]
},
- "execution_count": 12,
+ "execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "df.pivot_longer(\n",
- " index = [(\"A\", \"D\")],\n",
- " column_names = [(\"B\", \"E\")]\n",
- ")"
+ "df.pivot_longer(index=[(\"A\", \"D\")], column_names=[(\"B\", \"E\")])"
]
},
{
@@ -1127,7 +1222,7 @@
},
{
"cell_type": "code",
- "execution_count": 13,
+ "execution_count": 14,
"metadata": {},
"outputs": [
{
@@ -1186,17 +1281,13 @@
"2 c B 5"
]
},
- "execution_count": 13,
+ "execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "df.pivot_longer(\n",
- " index = \"A\",\n",
- " column_names = \"B\",\n",
- " column_level = 0\n",
- ")"
+ "df.pivot_longer(index=\"A\", column_names=\"B\", column_level=0)"
]
},
{
@@ -1218,7 +1309,7 @@
},
{
"cell_type": "code",
- "execution_count": 14,
+ "execution_count": 15,
"metadata": {},
"outputs": [
{
@@ -1578,13 +1669,13 @@
"[317 rows x 81 columns]"
]
},
- "execution_count": 14,
+ "execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "url = 'https://raw.githubusercontent.com/tidyverse/tidyr/main/data-raw/billboard.csv'\n",
+ "url = \"https://raw.githubusercontent.com/tidyverse/tidyr/main/data-raw/billboard.csv\"\n",
"df = pd.read_csv(url)\n",
"\n",
"df"
@@ -1592,9 +1683,17 @@
},
{
"cell_type": "code",
- "execution_count": 15,
+ "execution_count": 16,
"metadata": {},
"outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/Users/samuel.oranyeli/pyjanitor/janitor/functions/select.py:508: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n",
+ " bools = index.str.contains(arg, na=False, regex=True)\n"
+ ]
+ },
{
"data": {
"text/html": [
@@ -1771,20 +1870,19 @@
"[24092 rows x 7 columns]"
]
},
- "execution_count": 15,
+ "execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# unpivot all columns that start with 'wk'\n",
- "df.pivot_longer(column_names = re.compile(\"^(wk)\"), \n",
- " names_to='week')"
+ "df.pivot_longer(column_names=re.compile(\"^(wk)\"), names_to=\"week\")"
]
},
{
"cell_type": "code",
- "execution_count": 16,
+ "execution_count": 17,
"metadata": {},
"outputs": [
{
@@ -1963,14 +2061,13 @@
"[24092 rows x 7 columns]"
]
},
- "execution_count": 16,
+ "execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "df.pivot_longer(column_names = \"wk*\", \n",
- " names_to = 'week')"
+ "df.pivot_longer(column_names=\"wk*\", names_to=\"week\")"
]
},
{
@@ -1982,7 +2079,7 @@
},
{
"cell_type": "code",
- "execution_count": 17,
+ "execution_count": 18,
"metadata": {},
"outputs": [
{
@@ -2093,18 +2190,20 @@
"8 3 3 2.1 2.9"
]
},
- "execution_count": 17,
+ "execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "df = pd.DataFrame({\n",
- " 'famid': [1, 1, 1, 2, 2, 2, 3, 3, 3],\n",
- " 'birth': [1, 2, 3, 1, 2, 3, 1, 2, 3],\n",
- " 'ht1': [2.8, 2.9, 2.2, 2, 1.8, 1.9, 2.2, 2.3, 2.1],\n",
- " 'ht2': [3.4, 3.8, 2.9, 3.2, 2.8, 2.4, 3.3, 3.4, 2.9]\n",
- "})\n",
+ "df = pd.DataFrame(\n",
+ " {\n",
+ " \"famid\": [1, 1, 1, 2, 2, 2, 3, 3, 3],\n",
+ " \"birth\": [1, 2, 3, 1, 2, 3, 1, 2, 3],\n",
+ " \"ht1\": [2.8, 2.9, 2.2, 2, 1.8, 1.9, 2.2, 2.3, 2.1],\n",
+ " \"ht2\": [3.4, 3.8, 2.9, 3.2, 2.8, 2.4, 3.3, 3.4, 2.9],\n",
+ " }\n",
+ ")\n",
"\n",
"df"
]
@@ -2118,7 +2217,7 @@
},
{
"cell_type": "code",
- "execution_count": 18,
+ "execution_count": 19,
"metadata": {},
"outputs": [
{
@@ -2265,13 +2364,13 @@
" 2 2.9"
]
},
- "execution_count": 18,
+ "execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "pd.wide_to_long(df, stubnames='ht', i=['famid', 'birth'], j='age')"
+ "pd.wide_to_long(df, stubnames=\"ht\", i=[\"famid\", \"birth\"], j=\"age\")"
]
},
{
@@ -2283,7 +2382,7 @@
},
{
"cell_type": "code",
- "execution_count": 19,
+ "execution_count": 20,
"metadata": {},
"outputs": [
{
@@ -2466,15 +2565,17 @@
"17 3 3 2 2.9"
]
},
- "execution_count": 19,
+ "execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "df.pivot_longer(index=['famid','birth'],\n",
- " names_to=('.value', 'age'),\n",
- " names_pattern=r\"(.+)(.)\")"
+ "df.pivot_longer(\n",
+ " index=[\"famid\", \"birth\"],\n",
+ " names_to=(\".value\", \"age\"),\n",
+ " names_pattern=r\"(.+)(.)\",\n",
+ ")"
]
},
{
@@ -2495,7 +2596,7 @@
},
{
"cell_type": "code",
- "execution_count": 20,
+ "execution_count": 21,
"metadata": {},
"outputs": [
{
@@ -2678,18 +2779,18 @@
"17 3 3 2 2.9"
]
},
- "execution_count": 20,
+ "execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.pivot_longer(\n",
- " index = ['famid','birth'],\n",
- " names_to = ('.value', 'age'),\n",
- " names_pattern = r\"(.+)(.)\", \n",
- " sort_by_appearance = True,\n",
- " )"
+ " index=[\"famid\", \"birth\"],\n",
+ " names_to=(\".value\", \"age\"),\n",
+ " names_pattern=r\"(.+)(.)\",\n",
+ " sort_by_appearance=True,\n",
+ ")"
]
},
{
@@ -2708,7 +2809,7 @@
},
{
"cell_type": "code",
- "execution_count": 21,
+ "execution_count": 22,
"metadata": {},
"outputs": [
{
@@ -2809,7 +2910,7 @@
"5 F L 124.010289 137.962195 -46.015943 22.905889"
]
},
- "execution_count": 21,
+ "execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
@@ -2866,7 +2967,7 @@
},
{
"cell_type": "code",
- "execution_count": 22,
+ "execution_count": 23,
"metadata": {},
"outputs": [
{
@@ -2967,7 +3068,7 @@
"5 F L 124.010289 137.962195 -46.015943 22.905889"
]
},
- "execution_count": 22,
+ "execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
@@ -2987,7 +3088,7 @@
},
{
"cell_type": "code",
- "execution_count": 23,
+ "execution_count": 24,
"metadata": {
"tags": []
},
@@ -3028,78 +3129,84 @@
" \n",
"
\n",
" \n",
- " 0 | \n",
+ " 0 | \n",
" off | \n",
" A | \n",
" 121.271083 | \n",
" -7.188632 | \n",
"
\n",
" \n",
- " pt | \n",
- " G | \n",
- " 100.075482 | \n",
- " 4.472090 | \n",
- "
\n",
- " \n",
- " 1 | \n",
+ " 1 | \n",
" off | \n",
" B | \n",
" 75.938453 | \n",
" -143.228857 | \n",
"
\n",
" \n",
- " pt | \n",
- " H | \n",
- " 75.191326 | \n",
- " -144.387785 | \n",
- "
\n",
- " \n",
- " 2 | \n",
+ " 2 | \n",
" off | \n",
" C | \n",
" 135.043791 | \n",
" 21.242563 | \n",
"
\n",
" \n",
- " pt | \n",
- " I | \n",
- " 122.651345 | \n",
- " -40.456110 | \n",
- "
\n",
- " \n",
- " 3 | \n",
+ " 3 | \n",
" off | \n",
" D | \n",
" 134.511284 | \n",
" 40.937417 | \n",
"
\n",
" \n",
- " pt | \n",
- " J | \n",
- " 124.135533 | \n",
- " -46.071562 | \n",
- "
\n",
- " \n",
- " 4 | \n",
+ " 4 | \n",
" off | \n",
" E | \n",
" 134.484374 | \n",
" 40.784720 | \n",
"
\n",
" \n",
+ " 5 | \n",
+ " off | \n",
+ " F | \n",
+ " 137.962195 | \n",
+ " 22.905889 | \n",
+ "
\n",
+ " \n",
+ " 0 | \n",
" pt | \n",
- " K | \n",
+ " G | \n",
+ " 100.075482 | \n",
+ " 4.472090 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " pt | \n",
+ " H | \n",
+ " 75.191326 | \n",
+ " -144.387785 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " pt | \n",
+ " I | \n",
+ " 122.651345 | \n",
+ " -40.456110 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " pt | \n",
+ " J | \n",
" 124.135533 | \n",
" -46.071562 | \n",
"
\n",
" \n",
- " 5 | \n",
- " off | \n",
- " F | \n",
- " 137.962195 | \n",
- " 22.905889 | \n",
+ " 4 | \n",
+ " pt | \n",
+ " K | \n",
+ " 124.135533 | \n",
+ " -46.071562 | \n",
"
\n",
" \n",
+ " 5 | \n",
" pt | \n",
" L | \n",
" 124.010289 | \n",
@@ -3113,20 +3220,20 @@
" loc lat long\n",
"index set \n",
"0 off A 121.271083 -7.188632\n",
- " pt G 100.075482 4.472090\n",
"1 off B 75.938453 -143.228857\n",
- " pt H 75.191326 -144.387785\n",
"2 off C 135.043791 21.242563\n",
- " pt I 122.651345 -40.456110\n",
"3 off D 134.511284 40.937417\n",
- " pt J 124.135533 -46.071562\n",
"4 off E 134.484374 40.784720\n",
- " pt K 124.135533 -46.071562\n",
"5 off F 137.962195 22.905889\n",
- " pt L 124.010289 -46.015943"
+ "0 pt G 100.075482 4.472090\n",
+ "1 pt H 75.191326 -144.387785\n",
+ "2 pt I 122.651345 -40.456110\n",
+ "3 pt J 124.135533 -46.071562\n",
+ "4 pt K 124.135533 -46.071562\n",
+ "5 pt L 124.010289 -46.015943"
]
},
- "execution_count": 23,
+ "execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
@@ -3151,7 +3258,7 @@
},
{
"cell_type": "code",
- "execution_count": 24,
+ "execution_count": 25,
"metadata": {
"tags": []
},
@@ -3288,26 +3395,23 @@
"11 pt L 124.010289 -46.015943"
]
},
- "execution_count": 24,
+ "execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "df.pivot_longer(\n",
- " names_to = [\"set\", \".value\"], \n",
- " names_pattern = \"(.+)_(.+)\"\n",
- " )"
+ "df.pivot_longer(names_to=[\"set\", \".value\"], names_pattern=\"(.+)_(.+)\")"
]
},
{
"cell_type": "code",
- "execution_count": 25,
+ "execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
- "# Another way to see the pairings, \n",
- "# to see what is linked to `.value`, \n",
+ "# Another way to see the pairings,\n",
+ "# to see what is linked to `.value`,\n",
"\n",
"# names_to = [\"set\", \".value\"]\n",
"# names_pattern = \"(.+)_(.+)\"\n",
@@ -3339,7 +3443,7 @@
},
{
"cell_type": "code",
- "execution_count": 26,
+ "execution_count": 27,
"metadata": {},
"outputs": [
{
@@ -3474,18 +3578,18 @@
"5 pt L 124.010289 -46.015943"
]
},
- "execution_count": 26,
+ "execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.pivot_longer(\n",
- " names_to = [\"set\", \".value\"], \n",
- " names_sep = \"_\",\n",
- " ignore_index = False,\n",
- " sort_by_appearance = True\n",
- " )"
+ " names_to=[\"set\", \".value\"],\n",
+ " names_sep=\"_\",\n",
+ " ignore_index=False,\n",
+ " sort_by_appearance=True,\n",
+ ")"
]
},
{
@@ -3497,7 +3601,7 @@
},
{
"cell_type": "code",
- "execution_count": 27,
+ "execution_count": 28,
"metadata": {},
"outputs": [
{
@@ -3548,15 +3652,15 @@
"0 2 3 4 5 6 7"
]
},
- "execution_count": 27,
+ "execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "df = pd.DataFrame([{'a_1': 2, 'ab_1': 3, \n",
- " 'ac_1': 4, 'a_2': 5, \n",
- " 'ab_2': 6, 'ac_2': 7}])\n",
+ "df = pd.DataFrame(\n",
+ " [{\"a_1\": 2, \"ab_1\": 3, \"ac_1\": 4, \"a_2\": 5, \"ab_2\": 6, \"ac_2\": 7}]\n",
+ ")\n",
"df"
]
},
@@ -3569,7 +3673,7 @@
},
{
"cell_type": "code",
- "execution_count": 28,
+ "execution_count": 29,
"metadata": {
"tags": []
},
@@ -3633,15 +3737,15 @@
" 2 5 6 7"
]
},
- "execution_count": 28,
+ "execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df1 = df.copy()\n",
- "df1['id'] = df1.index\n",
- "pd.wide_to_long(df1, ['a','ab','ac'],i='id',j='num',sep='_')"
+ "df1[\"id\"] = df1.index\n",
+ "pd.wide_to_long(df1, [\"a\", \"ab\", \"ac\"], i=\"id\", j=\"num\", sep=\"_\")"
]
},
{
@@ -3653,7 +3757,7 @@
},
{
"cell_type": "code",
- "execution_count": 29,
+ "execution_count": 30,
"metadata": {
"tags": []
},
@@ -3710,16 +3814,13 @@
"1 2 5 6 7"
]
},
- "execution_count": 29,
+ "execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "df.pivot_longer(\n",
- " names_to = ('.value', 'num'), \n",
- " names_sep = '_'\n",
- " )"
+ "df.pivot_longer(names_to=(\".value\", \"num\"), names_sep=\"_\")"
]
},
{
@@ -3733,7 +3834,7 @@
},
{
"cell_type": "code",
- "execution_count": 30,
+ "execution_count": 31,
"metadata": {},
"outputs": [
{
@@ -3797,22 +3898,23 @@
"1 2 7 8 9 10 11 12"
]
},
- "execution_count": 30,
+ "execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "df = pd.DataFrame([[1,1,2,3,4,5,6],\n",
- " [2,7,8,9,10,11,12]], \n",
- " columns=['id', 'ax','ay','az','bx','by','bz'])\n",
+ "df = pd.DataFrame(\n",
+ " [[1, 1, 2, 3, 4, 5, 6], [2, 7, 8, 9, 10, 11, 12]],\n",
+ " columns=[\"id\", \"ax\", \"ay\", \"az\", \"bx\", \"by\", \"bz\"],\n",
+ ")\n",
"\n",
"df"
]
},
{
"cell_type": "code",
- "execution_count": 31,
+ "execution_count": 32,
"metadata": {},
"outputs": [
{
@@ -3888,17 +3990,15 @@
"3 2 b 10 11 12"
]
},
- "execution_count": 31,
+ "execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.pivot_longer(\n",
- " index = 'id', \n",
- " names_to = ('name', '.value'), \n",
- " names_pattern = '(.)(.)'\n",
- " )"
+ " index=\"id\", names_to=(\"name\", \".value\"), names_pattern=\"(.)(.)\"\n",
+ ")"
]
},
{
@@ -3919,7 +4019,7 @@
},
{
"cell_type": "code",
- "execution_count": 32,
+ "execution_count": 33,
"metadata": {},
"outputs": [
{
@@ -3968,21 +4068,21 @@
"0 1 2 3 4 5"
]
},
- "execution_count": 32,
+ "execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "df = pd.DataFrame([{'id': 1, 'A1g_hi': 2, \n",
- " 'A2g_hi': 3, 'A3g_hi': 4, \n",
- " 'A4g_hi': 5}])\n",
+ "df = pd.DataFrame(\n",
+ " [{\"id\": 1, \"A1g_hi\": 2, \"A2g_hi\": 3, \"A3g_hi\": 4, \"A4g_hi\": 5}]\n",
+ ")\n",
"df"
]
},
{
"cell_type": "code",
- "execution_count": 33,
+ "execution_count": 34,
"metadata": {},
"outputs": [
{
@@ -4048,16 +4148,15 @@
"3 1 4 5"
]
},
- "execution_count": 33,
+ "execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.pivot_longer(\n",
- " index = 'id', \n",
- " names_to = ['time','.value'], \n",
- " names_pattern = \"A(.)g_(.+)\")"
+ " index=\"id\", names_to=[\"time\", \".value\"], names_pattern=\"A(.)g_(.+)\"\n",
+ ")"
]
},
{
@@ -4069,7 +4168,7 @@
},
{
"cell_type": "code",
- "execution_count": 34,
+ "execution_count": 35,
"metadata": {},
"outputs": [
{
@@ -4172,7 +4271,7 @@
"2 10 "
]
},
- "execution_count": 34,
+ "execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
@@ -4206,7 +4305,7 @@
},
{
"cell_type": "code",
- "execution_count": 35,
+ "execution_count": 36,
"metadata": {},
"outputs": [
{
@@ -4233,8 +4332,8 @@
" Manufacturer | \n",
" Device | \n",
" Model | \n",
- " Max-quant | \n",
" Quantity | \n",
+ " Max-quant | \n",
"
\n",
" \n",
" \n",
@@ -4243,91 +4342,91 @@
" Panasonic | \n",
" TV | \n",
" S3424 | \n",
- " 12.0 | \n",
- " 5.0 | \n",
+ " 5 | \n",
+ " 12 | \n",
" \n",
" \n",
" 1 | \n",
" Panasonic | \n",
" TV | \n",
" T232 | \n",
- " 10.0 | \n",
- " 1.0 | \n",
+ " 1 | \n",
+ " 10 | \n",
"
\n",
" \n",
" 2 | \n",
" Panasonic | \n",
" TV | \n",
" X3421 | \n",
- " 11.0 | \n",
- " 1.0 | \n",
+ " 1 | \n",
+ " 11 | \n",
"
\n",
" \n",
" 3 | \n",
" Sanyo | \n",
" Radio | \n",
" S111 | \n",
- " 9.0 | \n",
- " 4.0 | \n",
+ " 4 | \n",
+ " 9 | \n",
"
\n",
" \n",
" 4 | \n",
" Sanyo | \n",
" Radio | \n",
" S1s1 | \n",
- " 9.0 | \n",
- " 2.0 | \n",
+ " 2 | \n",
+ " 9 | \n",
"
\n",
" \n",
" 5 | \n",
" Sanyo | \n",
" Radio | \n",
" S1s2 | \n",
- " 10.0 | \n",
- " 4.0 | \n",
+ " 4 | \n",
+ " 10 | \n",
"
\n",
" \n",
" 6 | \n",
" Sony | \n",
" TV | \n",
" A222 | \n",
- " 10.0 | \n",
- " 5.0 | \n",
+ " 5 | \n",
+ " 10 | \n",
"
\n",
" \n",
" 7 | \n",
" Sony | \n",
" TV | \n",
" A234 | \n",
- " 9.0 | \n",
- " 5.0 | \n",
+ " 5 | \n",
+ " 9 | \n",
"
\n",
" \n",
" 8 | \n",
" Sony | \n",
" TV | \n",
" A4345 | \n",
- " 9.0 | \n",
- " 4.0 | \n",
+ " 4 | \n",
+ " 9 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
- " Manufacturer Device Model Max-quant Quantity\n",
- "0 Panasonic TV S3424 12.0 5.0\n",
- "1 Panasonic TV T232 10.0 1.0\n",
- "2 Panasonic TV X3421 11.0 1.0\n",
- "3 Sanyo Radio S111 9.0 4.0\n",
- "4 Sanyo Radio S1s1 9.0 2.0\n",
- "5 Sanyo Radio S1s2 10.0 4.0\n",
- "6 Sony TV A222 10.0 5.0\n",
- "7 Sony TV A234 9.0 5.0\n",
- "8 Sony TV A4345 9.0 4.0"
+ " Manufacturer Device Model Quantity Max-quant\n",
+ "0 Panasonic TV S3424 5 12\n",
+ "1 Panasonic TV T232 1 10\n",
+ "2 Panasonic TV X3421 1 11\n",
+ "3 Sanyo Radio S111 4 9\n",
+ "4 Sanyo Radio S1s1 2 9\n",
+ "5 Sanyo Radio S1s2 4 10\n",
+ "6 Sony TV A222 5 10\n",
+ "7 Sony TV A234 5 9\n",
+ "8 Sony TV A4345 4 9"
]
},
- "execution_count": 35,
+ "execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
@@ -4336,19 +4435,20 @@
"df1 = df.copy()\n",
"# Create a multiIndex column header\n",
"df1.columns = pd.MultiIndex.from_arrays(\n",
- " zip(*df1.columns.str.split(\"\\s?\\|\\s?\"))\n",
+ " zip(*df1.columns.str.split(r\"\\s?\\|\\s?\"))\n",
")\n",
"\n",
- "# Reshape the dataframe using \n",
+ "# Reshape the dataframe using\n",
"# `set_index`, `droplevel`, and `stack`\n",
- "(df1.stack([0, 1])\n",
- " .droplevel(1, axis=1)\n",
- " .set_index(\"Model\", append=True)\n",
- " .rename_axis([None, \"Manufacturer\", \"Device\", \"Model\"])\n",
- " .sort_index(level=[1, 2, 3])\n",
- " .reset_index()\n",
- " .drop(\"level_0\", axis=1)\n",
- " )\n"
+ "(\n",
+ " df1.stack([0, 1], future_stack=True)\n",
+ " .droplevel(1, axis=1)\n",
+ " .set_index(\"Model\", append=True)\n",
+ " .rename_axis([None, \"Manufacturer\", \"Device\", \"Model\"])\n",
+ " .sort_index(level=[1, 2, 3])\n",
+ " .reset_index()\n",
+ " .drop(\"level_0\", axis=1)\n",
+ ")"
]
},
{
@@ -4360,7 +4460,7 @@
},
{
"cell_type": "code",
- "execution_count": 36,
+ "execution_count": 37,
"metadata": {},
"outputs": [
{
@@ -4394,6 +4494,30 @@
" \n",
" \n",
" 0 | \n",
+ " Sony | \n",
+ " TV | \n",
+ " A222 | \n",
+ " 5 | \n",
+ " 10 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " Sony | \n",
+ " TV | \n",
+ " A234 | \n",
+ " 5 | \n",
+ " 9 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " Sony | \n",
+ " TV | \n",
+ " A4345 | \n",
+ " 4 | \n",
+ " 9 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
" Panasonic | \n",
" TV | \n",
" T232 | \n",
@@ -4401,7 +4525,7 @@
" 10 | \n",
"
\n",
" \n",
- " 1 | \n",
+ " 4 | \n",
" Panasonic | \n",
" TV | \n",
" S3424 | \n",
@@ -4409,7 +4533,7 @@
" 12 | \n",
"
\n",
" \n",
- " 2 | \n",
+ " 5 | \n",
" Panasonic | \n",
" TV | \n",
" X3421 | \n",
@@ -4417,7 +4541,7 @@
" 11 | \n",
"
\n",
" \n",
- " 3 | \n",
+ " 6 | \n",
" Sanyo | \n",
" Radio | \n",
" S111 | \n",
@@ -4425,7 +4549,7 @@
" 9 | \n",
"
\n",
" \n",
- " 4 | \n",
+ " 7 | \n",
" Sanyo | \n",
" Radio | \n",
" S1s1 | \n",
@@ -4433,64 +4557,40 @@
" 9 | \n",
"
\n",
" \n",
- " 5 | \n",
+ " 8 | \n",
" Sanyo | \n",
" Radio | \n",
" S1s2 | \n",
" 4 | \n",
" 10 | \n",
"
\n",
- " \n",
- " 6 | \n",
- " Sony | \n",
- " TV | \n",
- " A222 | \n",
- " 5 | \n",
- " 10 | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " Sony | \n",
- " TV | \n",
- " A234 | \n",
- " 5 | \n",
- " 9 | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " Sony | \n",
- " TV | \n",
- " A4345 | \n",
- " 4 | \n",
- " 9 | \n",
- "
\n",
" \n",
"\n",
""
],
"text/plain": [
" Manufacturer Device Model Quantity Max-quant \n",
- "0 Panasonic TV T232 1 10\n",
- "1 Panasonic TV S3424 5 12\n",
- "2 Panasonic TV X3421 1 11\n",
- "3 Sanyo Radio S111 4 9\n",
- "4 Sanyo Radio S1s1 2 9\n",
- "5 Sanyo Radio S1s2 4 10\n",
- "6 Sony TV A222 5 10\n",
- "7 Sony TV A234 5 9\n",
- "8 Sony TV A4345 4 9"
+ "0 Sony TV A222 5 10\n",
+ "1 Sony TV A234 5 9\n",
+ "2 Sony TV A4345 4 9\n",
+ "3 Panasonic TV T232 1 10\n",
+ "4 Panasonic TV S3424 5 12\n",
+ "5 Panasonic TV X3421 1 11\n",
+ "6 Sanyo Radio S111 4 9\n",
+ "7 Sanyo Radio S1s1 2 9\n",
+ "8 Sanyo Radio S1s2 4 10"
]
},
- "execution_count": 36,
+ "execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.pivot_longer(\n",
- " names_to = (\"Manufacturer\", \"Device\", \".value\"),\n",
- " names_pattern = r\"(.+)\\|(.+)\\|(.+)\\|.*\",\n",
- " )"
+ " names_to=(\"Manufacturer\", \"Device\", \".value\"),\n",
+ " names_pattern=r\"(.+)\\|(.+)\\|(.+)\\|.*\",\n",
+ ")"
]
},
{
@@ -4504,7 +4604,7 @@
},
{
"cell_type": "code",
- "execution_count": 37,
+ "execution_count": 38,
"metadata": {},
"outputs": [
{
@@ -4648,44 +4748,48 @@
"[3 rows x 32 columns]"
]
},
- "execution_count": 37,
+ "execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "df = pd.DataFrame({'time': [1, 2, 3], \n",
- " 'factor': ['a','a','b'],\n",
- " 'variable1': [0,0,0],\n",
- " 'variable2': [0,0,1],\n",
- " 'variable3': [0,2,0],\n",
- " 'variable4': [2,0,1],\n",
- " 'variable5': [1,0,1],\n",
- " 'variable6': [0,1,1], \n",
- " 'O1V1': [0,0.2,-0.3],\n",
- " 'O1V2': [0,0.4,-0.9],\n",
- " 'O1V3': [0.5,0.2,-0.6],\n",
- " 'O1V4': [0.5,0.2,-0.6],\n",
- " 'O1V5': [0,0.2,-0.3],\n",
- " 'O1V6': [0,0.4,-0.9],\n",
- " 'O1V7': [0.5,0.2,-0.6],\n",
- " 'O1V8': [0.5,0.2,-0.6], \n",
- " 'O2V1': [0,0.5,0.3],\n",
- " 'O2V2': [0,0.2,0.9],\n",
- " 'O2V3': [0.6,0.1,-0.3],\n",
- " 'O2V4': [0.5,0.2,-0.6],\n",
- " 'O2V5': [0,0.5,0.3],\n",
- " 'O2V6': [0,0.2,0.9],\n",
- " 'O2V7': [0.6,0.1,-0.3],\n",
- " 'O2V8': [0.5,0.2,-0.6], \n",
- " 'O3V1': [0,0.7,0.4],\n",
- " 'O3V2': [0.9,0.2,-0.3],\n",
- " 'O3V3': [0.5,0.2,-0.7],\n",
- " 'O3V4': [0.5,0.2,-0.6],\n",
- " 'O3V5': [0,0.7,0.4],\n",
- " 'O3V6': [0.9,0.2,-0.3],\n",
- " 'O3V7': [0.5,0.2,-0.7],\n",
- " 'O3V8': [0.5,0.2,-0.6]})\n",
+ "df = pd.DataFrame(\n",
+ " {\n",
+ " \"time\": [1, 2, 3],\n",
+ " \"factor\": [\"a\", \"a\", \"b\"],\n",
+ " \"variable1\": [0, 0, 0],\n",
+ " \"variable2\": [0, 0, 1],\n",
+ " \"variable3\": [0, 2, 0],\n",
+ " \"variable4\": [2, 0, 1],\n",
+ " \"variable5\": [1, 0, 1],\n",
+ " \"variable6\": [0, 1, 1],\n",
+ " \"O1V1\": [0, 0.2, -0.3],\n",
+ " \"O1V2\": [0, 0.4, -0.9],\n",
+ " \"O1V3\": [0.5, 0.2, -0.6],\n",
+ " \"O1V4\": [0.5, 0.2, -0.6],\n",
+ " \"O1V5\": [0, 0.2, -0.3],\n",
+ " \"O1V6\": [0, 0.4, -0.9],\n",
+ " \"O1V7\": [0.5, 0.2, -0.6],\n",
+ " \"O1V8\": [0.5, 0.2, -0.6],\n",
+ " \"O2V1\": [0, 0.5, 0.3],\n",
+ " \"O2V2\": [0, 0.2, 0.9],\n",
+ " \"O2V3\": [0.6, 0.1, -0.3],\n",
+ " \"O2V4\": [0.5, 0.2, -0.6],\n",
+ " \"O2V5\": [0, 0.5, 0.3],\n",
+ " \"O2V6\": [0, 0.2, 0.9],\n",
+ " \"O2V7\": [0.6, 0.1, -0.3],\n",
+ " \"O2V8\": [0.5, 0.2, -0.6],\n",
+ " \"O3V1\": [0, 0.7, 0.4],\n",
+ " \"O3V2\": [0.9, 0.2, -0.3],\n",
+ " \"O3V3\": [0.5, 0.2, -0.7],\n",
+ " \"O3V4\": [0.5, 0.2, -0.6],\n",
+ " \"O3V5\": [0, 0.7, 0.4],\n",
+ " \"O3V6\": [0.9, 0.2, -0.3],\n",
+ " \"O3V7\": [0.5, 0.2, -0.7],\n",
+ " \"O3V8\": [0.5, 0.2, -0.6],\n",
+ " }\n",
+ ")\n",
"df"
]
},
@@ -4707,7 +4811,7 @@
},
{
"cell_type": "code",
- "execution_count": 38,
+ "execution_count": 39,
"metadata": {},
"outputs": [
{
@@ -4868,20 +4972,30 @@
"8 3 b 0 1 3 0.4 -0.3 -0.7 -0.6"
]
},
- "execution_count": 38,
+ "execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "df1 = df.rename(columns={x: x[2:]+x[1:2] for x in df.columns[df.columns.str.startswith('O')]})\n",
+ "df1 = df.rename(\n",
+ " columns={\n",
+ " x: x[2:] + x[1:2] for x in df.columns[df.columns.str.startswith(\"O\")]\n",
+ " }\n",
+ ")\n",
"\n",
- "df1 = pd.wide_to_long(df1, i=['time', 'factor']+[f'variable{i}' for i in range(1,7)], \n",
- " j='id', stubnames=[f'V{i}' for i in range(1,9)], suffix='.*')\n",
+ "df1 = pd.wide_to_long(\n",
+ " df1,\n",
+ " i=[\"time\", \"factor\"] + [f\"variable{i}\" for i in range(1, 7)],\n",
+ " j=\"id\",\n",
+ " stubnames=[f\"V{i}\" for i in range(1, 9)],\n",
+ " suffix=\".*\",\n",
+ ")\n",
"\n",
- "df1 = (df1.reset_index()\n",
- " .drop(columns=[f'V{i}' for i in range(5,9)]\n",
- " +[f'variable{i}' for i in range(3,7)]))\n",
+ "df1 = df1.reset_index().drop(\n",
+ " columns=[f\"V{i}\" for i in range(5, 9)]\n",
+ " + [f\"variable{i}\" for i in range(3, 7)]\n",
+ ")\n",
"\n",
"df1"
]
@@ -4895,7 +5009,7 @@
},
{
"cell_type": "code",
- "execution_count": 39,
+ "execution_count": 40,
"metadata": {},
"outputs": [
{
@@ -5056,18 +5170,18 @@
"8 3 b 0 1 3 0.4 -0.3 -0.7 -0.6"
]
},
- "execution_count": 39,
+ "execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.pivot_longer(\n",
- " index = slice(\"time\", \"variable2\"),\n",
- " column_names = re.compile(\".+V[1-4]$\"),\n",
- " names_to = (\"id\", \".value\"),\n",
- " names_pattern = \".(.)(.+)$\",\n",
- " sort_by_appearance = True\n",
+ " index=slice(\"time\", \"variable2\"),\n",
+ " column_names=re.compile(\".+V[1-4]$\"),\n",
+ " names_to=(\"id\", \".value\"),\n",
+ " names_pattern=\".(.)(.+)$\",\n",
+ " sort_by_appearance=True,\n",
")"
]
},
@@ -5082,7 +5196,7 @@
},
{
"cell_type": "code",
- "execution_count": 40,
+ "execution_count": 41,
"metadata": {},
"outputs": [
{
@@ -5134,21 +5248,19 @@
"1 2 33 45"
]
},
- "execution_count": 40,
+ "execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "df = pd.DataFrame({'id': [1, 2], \n",
- " 'A_value': [50, 33], \n",
- " 'D_value': [60, 45]})\n",
+ "df = pd.DataFrame({\"id\": [1, 2], \"A_value\": [50, 33], \"D_value\": [60, 45]})\n",
"df"
]
},
{
"cell_type": "code",
- "execution_count": 41,
+ "execution_count": 42,
"metadata": {},
"outputs": [
{
@@ -5214,17 +5326,13 @@
"3 2 D 45"
]
},
- "execution_count": 41,
+ "execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "df.pivot_longer(\n",
- " index = 'id', \n",
- " names_to = ('value_type', '.value'), \n",
- " names_sep = '_'\n",
- " )"
+ "df.pivot_longer(index=\"id\", names_to=(\"value_type\", \".value\"), names_sep=\"_\")"
]
},
{
@@ -5238,7 +5346,7 @@
},
{
"cell_type": "code",
- "execution_count": 42,
+ "execution_count": 43,
"metadata": {},
"outputs": [
{
@@ -5303,18 +5411,22 @@
"1 14 moderate "
]
},
- "execution_count": 42,
+ "execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "df = pd.DataFrame({'subject': [1, 2],\n",
- " 'A_target_word_gd': [1, 11],\n",
- " 'A_target_word_fd': [2, 12],\n",
- " 'B_target_word_gd': [3, 13],\n",
- " 'B_target_word_fd': [4, 14],\n",
- " 'subject_type': ['mild', 'moderate']})\n",
+ "df = pd.DataFrame(\n",
+ " {\n",
+ " \"subject\": [1, 2],\n",
+ " \"A_target_word_gd\": [1, 11],\n",
+ " \"A_target_word_fd\": [2, 12],\n",
+ " \"B_target_word_gd\": [3, 13],\n",
+ " \"B_target_word_fd\": [4, 14],\n",
+ " \"subject_type\": [\"mild\", \"moderate\"],\n",
+ " }\n",
+ ")\n",
"\n",
"df"
]
@@ -5328,7 +5440,7 @@
},
{
"cell_type": "code",
- "execution_count": 43,
+ "execution_count": 44,
"metadata": {},
"outputs": [
{
@@ -5440,25 +5552,18 @@
"7 moderate 2 14 B fd"
]
},
- "execution_count": 43,
+ "execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "new_df =(pd.melt(df,\n",
- " id_vars=['subject_type','subject'], \n",
- " var_name='abc')\n",
- " .sort_values(by=['subject', 'subject_type'])\n",
- " )\n",
- "new_df['cond']=(new_df['abc']\n",
- " .apply(lambda x: (x.split('_'))[0])\n",
- " )\n",
- "new_df['value_type']=(new_df\n",
- " .pop('abc')\n",
- " .apply(lambda x: (x.split('_'))[-1])\n",
- " )\n",
- "new_df\n"
+ "new_df = pd.melt(\n",
+ " df, id_vars=[\"subject_type\", \"subject\"], var_name=\"abc\"\n",
+ ").sort_values(by=[\"subject\", \"subject_type\"])\n",
+ "new_df[\"cond\"] = new_df[\"abc\"].apply(lambda x: (x.split(\"_\"))[0])\n",
+ "new_df[\"value_type\"] = new_df.pop(\"abc\").apply(lambda x: (x.split(\"_\"))[-1])\n",
+ "new_df"
]
},
{
@@ -5470,7 +5575,7 @@
},
{
"cell_type": "code",
- "execution_count": 44,
+ "execution_count": 45,
"metadata": {},
"outputs": [
{
@@ -5582,16 +5687,16 @@
"7 2 moderate B fd 14"
]
},
- "execution_count": 44,
+ "execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.pivot_longer(\n",
- " index = [\"subject\", \"subject_type\"],\n",
- " names_to = (\"cond\", \"value_type\"),\n",
- " names_pattern = \"([A-Z]).*(gd|fd)\",\n",
+ " index=[\"subject\", \"subject_type\"],\n",
+ " names_to=(\"cond\", \"value_type\"),\n",
+ " names_pattern=\"([A-Z]).*(gd|fd)\",\n",
")"
]
},
@@ -5606,7 +5711,7 @@
},
{
"cell_type": "code",
- "execution_count": 45,
+ "execution_count": 46,
"metadata": {},
"outputs": [
{
@@ -5718,17 +5823,17 @@
"7 2 moderate B fd 14"
]
},
- "execution_count": 45,
+ "execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.pivot_longer(\n",
- " index = [\"subject\", \"subject_type\"],\n",
- " names_to = (\"cond\", \"value_type\"),\n",
- " names_sep = \"_target_word_\",\n",
- ")\n"
+ " index=[\"subject\", \"subject_type\"],\n",
+ " names_to=(\"cond\", \"value_type\"),\n",
+ " names_sep=\"_target_word_\",\n",
+ ")"
]
},
{
@@ -5745,7 +5850,7 @@
},
{
"cell_type": "code",
- "execution_count": 46,
+ "execution_count": 47,
"metadata": {},
"outputs": [
{
@@ -5833,34 +5938,34 @@
"2 40.833 45.133 42.066 43.799 "
]
},
- "execution_count": 46,
+ "execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.DataFrame(\n",
- " {\n",
- " \"country\": [\"United States\", \"Russia\", \"China\"],\n",
- " \"vault_2012_f\": [\n",
- " 48.132,\n",
- " 46.366,\n",
- " 44.266,\n",
- " ],\n",
- " \"vault_2012_m\": [46.632, 46.866, 48.316],\n",
- " \"vault_2016_f\": [\n",
- " 46.866,\n",
- " 45.733,\n",
- " 44.332,\n",
- " ],\n",
- " \"vault_2016_m\": [45.865, 46.033, 45.0],\n",
- " \"floor_2012_f\": [45.366, 41.599, 40.833],\n",
- " \"floor_2012_m\": [45.266, 45.308, 45.133],\n",
- " \"floor_2016_f\": [45.999, 42.032, 42.066],\n",
- " \"floor_2016_m\": [43.757, 44.766, 43.799],\n",
- " }\n",
- " )\n",
- "df\n"
+ " {\n",
+ " \"country\": [\"United States\", \"Russia\", \"China\"],\n",
+ " \"vault_2012_f\": [\n",
+ " 48.132,\n",
+ " 46.366,\n",
+ " 44.266,\n",
+ " ],\n",
+ " \"vault_2012_m\": [46.632, 46.866, 48.316],\n",
+ " \"vault_2016_f\": [\n",
+ " 46.866,\n",
+ " 45.733,\n",
+ " 44.332,\n",
+ " ],\n",
+ " \"vault_2016_m\": [45.865, 46.033, 45.0],\n",
+ " \"floor_2012_f\": [45.366, 41.599, 40.833],\n",
+ " \"floor_2012_m\": [45.266, 45.308, 45.133],\n",
+ " \"floor_2016_f\": [45.999, 42.032, 42.066],\n",
+ " \"floor_2016_m\": [43.757, 44.766, 43.799],\n",
+ " }\n",
+ ")\n",
+ "df"
]
},
{
@@ -5872,7 +5977,7 @@
},
{
"cell_type": "code",
- "execution_count": 47,
+ "execution_count": 48,
"metadata": {},
"outputs": [
{
@@ -5907,194 +6012,194 @@
" \n",
" 0 | \n",
" United States | \n",
- " floor | \n",
+ " vault | \n",
" 2012 | \n",
" f | \n",
- " 45.366 | \n",
+ " 48.132 | \n",
"
\n",
" \n",
" 1 | \n",
" United States | \n",
- " floor | \n",
+ " vault | \n",
" 2012 | \n",
" m | \n",
- " 45.266 | \n",
+ " 46.632 | \n",
"
\n",
" \n",
" 2 | \n",
" United States | \n",
- " floor | \n",
+ " vault | \n",
" 2016 | \n",
" f | \n",
- " 45.999 | \n",
+ " 46.866 | \n",
"
\n",
" \n",
" 3 | \n",
" United States | \n",
- " floor | \n",
+ " vault | \n",
" 2016 | \n",
" m | \n",
- " 43.757 | \n",
+ " 45.865 | \n",
"
\n",
" \n",
" 4 | \n",
" United States | \n",
- " vault | \n",
+ " floor | \n",
" 2012 | \n",
" f | \n",
- " 48.132 | \n",
+ " 45.366 | \n",
"
\n",
" \n",
" 5 | \n",
" United States | \n",
- " vault | \n",
+ " floor | \n",
" 2012 | \n",
" m | \n",
- " 46.632 | \n",
+ " 45.266 | \n",
"
\n",
" \n",
" 6 | \n",
" United States | \n",
- " vault | \n",
+ " floor | \n",
" 2016 | \n",
" f | \n",
- " 46.866 | \n",
+ " 45.999 | \n",
"
\n",
" \n",
" 7 | \n",
" United States | \n",
- " vault | \n",
+ " floor | \n",
" 2016 | \n",
" m | \n",
- " 45.865 | \n",
+ " 43.757 | \n",
"
\n",
" \n",
" 8 | \n",
" Russia | \n",
- " floor | \n",
+ " vault | \n",
" 2012 | \n",
" f | \n",
- " 41.599 | \n",
+ " 46.366 | \n",
"
\n",
" \n",
" 9 | \n",
" Russia | \n",
- " floor | \n",
+ " vault | \n",
" 2012 | \n",
" m | \n",
- " 45.308 | \n",
+ " 46.866 | \n",
"
\n",
" \n",
" 10 | \n",
" Russia | \n",
- " floor | \n",
+ " vault | \n",
" 2016 | \n",
" f | \n",
- " 42.032 | \n",
+ " 45.733 | \n",
"
\n",
" \n",
" 11 | \n",
" Russia | \n",
- " floor | \n",
+ " vault | \n",
" 2016 | \n",
" m | \n",
- " 44.766 | \n",
+ " 46.033 | \n",
"
\n",
" \n",
" 12 | \n",
" Russia | \n",
- " vault | \n",
+ " floor | \n",
" 2012 | \n",
" f | \n",
- " 46.366 | \n",
+ " 41.599 | \n",
"
\n",
" \n",
" 13 | \n",
" Russia | \n",
- " vault | \n",
+ " floor | \n",
" 2012 | \n",
" m | \n",
- " 46.866 | \n",
+ " 45.308 | \n",
"
\n",
" \n",
" 14 | \n",
" Russia | \n",
- " vault | \n",
+ " floor | \n",
" 2016 | \n",
" f | \n",
- " 45.733 | \n",
+ " 42.032 | \n",
"
\n",
" \n",
" 15 | \n",
" Russia | \n",
- " vault | \n",
+ " floor | \n",
" 2016 | \n",
" m | \n",
- " 46.033 | \n",
+ " 44.766 | \n",
"
\n",
" \n",
" 16 | \n",
" China | \n",
- " floor | \n",
+ " vault | \n",
" 2012 | \n",
" f | \n",
- " 40.833 | \n",
+ " 44.266 | \n",
"
\n",
" \n",
" 17 | \n",
" China | \n",
- " floor | \n",
+ " vault | \n",
" 2012 | \n",
" m | \n",
- " 45.133 | \n",
+ " 48.316 | \n",
"
\n",
" \n",
" 18 | \n",
" China | \n",
- " floor | \n",
+ " vault | \n",
" 2016 | \n",
" f | \n",
- " 42.066 | \n",
+ " 44.332 | \n",
"
\n",
" \n",
" 19 | \n",
" China | \n",
- " floor | \n",
+ " vault | \n",
" 2016 | \n",
" m | \n",
- " 43.799 | \n",
+ " 45.000 | \n",
"
\n",
" \n",
" 20 | \n",
" China | \n",
- " vault | \n",
+ " floor | \n",
" 2012 | \n",
" f | \n",
- " 44.266 | \n",
+ " 40.833 | \n",
"
\n",
" \n",
" 21 | \n",
" China | \n",
- " vault | \n",
+ " floor | \n",
" 2012 | \n",
" m | \n",
- " 48.316 | \n",
+ " 45.133 | \n",
"
\n",
" \n",
" 22 | \n",
" China | \n",
- " vault | \n",
+ " floor | \n",
" 2016 | \n",
" f | \n",
- " 44.332 | \n",
+ " 42.066 | \n",
"
\n",
" \n",
" 23 | \n",
" China | \n",
- " vault | \n",
+ " floor | \n",
" 2016 | \n",
" m | \n",
- " 45.000 | \n",
+ " 43.799 | \n",
"
\n",
" \n",
"\n",
@@ -6102,47 +6207,47 @@
],
"text/plain": [
" country event year gender score\n",
- "0 United States floor 2012 f 45.366\n",
- "1 United States floor 2012 m 45.266\n",
- "2 United States floor 2016 f 45.999\n",
- "3 United States floor 2016 m 43.757\n",
- "4 United States vault 2012 f 48.132\n",
- "5 United States vault 2012 m 46.632\n",
- "6 United States vault 2016 f 46.866\n",
- "7 United States vault 2016 m 45.865\n",
- "8 Russia floor 2012 f 41.599\n",
- "9 Russia floor 2012 m 45.308\n",
- "10 Russia floor 2016 f 42.032\n",
- "11 Russia floor 2016 m 44.766\n",
- "12 Russia vault 2012 f 46.366\n",
- "13 Russia vault 2012 m 46.866\n",
- "14 Russia vault 2016 f 45.733\n",
- "15 Russia vault 2016 m 46.033\n",
- "16 China floor 2012 f 40.833\n",
- "17 China floor 2012 m 45.133\n",
- "18 China floor 2016 f 42.066\n",
- "19 China floor 2016 m 43.799\n",
- "20 China vault 2012 f 44.266\n",
- "21 China vault 2012 m 48.316\n",
- "22 China vault 2016 f 44.332\n",
- "23 China vault 2016 m 45.000"
+ "0 United States vault 2012 f 48.132\n",
+ "1 United States vault 2012 m 46.632\n",
+ "2 United States vault 2016 f 46.866\n",
+ "3 United States vault 2016 m 45.865\n",
+ "4 United States floor 2012 f 45.366\n",
+ "5 United States floor 2012 m 45.266\n",
+ "6 United States floor 2016 f 45.999\n",
+ "7 United States floor 2016 m 43.757\n",
+ "8 Russia vault 2012 f 46.366\n",
+ "9 Russia vault 2012 m 46.866\n",
+ "10 Russia vault 2016 f 45.733\n",
+ "11 Russia vault 2016 m 46.033\n",
+ "12 Russia floor 2012 f 41.599\n",
+ "13 Russia floor 2012 m 45.308\n",
+ "14 Russia floor 2016 f 42.032\n",
+ "15 Russia floor 2016 m 44.766\n",
+ "16 China vault 2012 f 44.266\n",
+ "17 China vault 2012 m 48.316\n",
+ "18 China vault 2016 f 44.332\n",
+ "19 China vault 2016 m 45.000\n",
+ "20 China floor 2012 f 40.833\n",
+ "21 China floor 2012 m 45.133\n",
+ "22 China floor 2016 f 42.066\n",
+ "23 China floor 2016 m 43.799"
]
},
- "execution_count": 47,
+ "execution_count": 48,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "reshape = df.set_index('country')\n",
- "reshape.columns = reshape.columns.str.split(\"_\", expand = True)\n",
- "columns = ['event', 'year', 'gender']\n",
+ "reshape = df.set_index(\"country\")\n",
+ "reshape.columns = reshape.columns.str.split(\"_\", expand=True)\n",
+ "columns = [\"event\", \"year\", \"gender\"]\n",
"reshape.columns.names = columns\n",
- "(reshape\n",
- ".stack(level = columns)\n",
- ".rename('score')\n",
- ".reset_index(level = ['country'] + columns)\n",
- ".reset_index(drop = True)\n",
+ "(\n",
+ " reshape.stack(level=columns, future_stack=True)\n",
+ " .rename(\"score\")\n",
+ " .reset_index(level=[\"country\"] + columns)\n",
+ " .reset_index(drop=True)\n",
")"
]
},
@@ -6155,7 +6260,7 @@
},
{
"cell_type": "code",
- "execution_count": 48,
+ "execution_count": 49,
"metadata": {},
"outputs": [
{
@@ -6411,17 +6516,17 @@
"23 China floor 2016 m 43.799"
]
},
- "execution_count": 48,
+ "execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.pivot_longer(\n",
- " index = \"country\",\n",
- " names_to = [\"event\", \"year\", \"gender\"],\n",
- " names_sep = \"_\",\n",
- " values_to = \"score\",\n",
+ " index=\"country\",\n",
+ " names_to=[\"event\", \"year\", \"gender\"],\n",
+ " names_sep=\"_\",\n",
+ " values_to=\"score\",\n",
")"
]
},
@@ -6434,7 +6539,7 @@
},
{
"cell_type": "code",
- "execution_count": 49,
+ "execution_count": 50,
"metadata": {},
"outputs": [
{
@@ -6690,18 +6795,18 @@
"23 China floor 2016 m 43.799"
]
},
- "execution_count": 49,
+ "execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.pivot_longer(\n",
- " index = \"country\",\n",
- " names_to = [\"event\", \"year\", \"gender\"],\n",
- " names_sep = \"_\",\n",
- " values_to = \"score\",\n",
- " sort_by_appearance = True\n",
+ " index=\"country\",\n",
+ " names_to=[\"event\", \"year\", \"gender\"],\n",
+ " names_sep=\"_\",\n",
+ " values_to=\"score\",\n",
+ " sort_by_appearance=True,\n",
")"
]
},
@@ -6716,7 +6821,7 @@
},
{
"cell_type": "code",
- "execution_count": 50,
+ "execution_count": 51,
"metadata": {},
"outputs": [
{
@@ -6832,55 +6937,69 @@
"5 553 284 "
]
},
- "execution_count": 50,
+ "execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.DataFrame(\n",
- " [{'title': 'Avatar',\n",
- " 'actor_1': 'CCH_Pound…',\n",
- " 'actor_2': 'Joel_Davi…',\n",
- " 'actor_3': 'Wes_Studi',\n",
- " 'actor_1_FB_likes': 1000,\n",
- " 'actor_2_FB_likes': 936,\n",
- " 'actor_3_FB_likes': 855},\n",
- " {'title': 'Pirates_of_the_Car…',\n",
- " 'actor_1': 'Johnny_De…',\n",
- " 'actor_2': 'Orlando_B…',\n",
- " 'actor_3': 'Jack_Daven…',\n",
- " 'actor_1_FB_likes': 40000,\n",
- " 'actor_2_FB_likes': 5000,\n",
- " 'actor_3_FB_likes': 1000},\n",
- " {'title': 'The_Dark_Knight_Ri…',\n",
- " 'actor_1': 'Tom_Hardy',\n",
- " 'actor_2': 'Christian…',\n",
- " 'actor_3': 'Joseph_Gor…',\n",
- " 'actor_1_FB_likes': 27000,\n",
- " 'actor_2_FB_likes': 23000,\n",
- " 'actor_3_FB_likes': 23000},\n",
- " {'title': 'John_Carter',\n",
- " 'actor_1': 'Daryl_Sab…',\n",
- " 'actor_2': 'Samantha_…',\n",
- " 'actor_3': 'Polly_Walk…',\n",
- " 'actor_1_FB_likes': 640,\n",
- " 'actor_2_FB_likes': 632,\n",
- " 'actor_3_FB_likes': 530},\n",
- " {'title': 'Spider-Man_3',\n",
- " 'actor_1': 'J.K._Simm…',\n",
- " 'actor_2': 'James_Fra…',\n",
- " 'actor_3': 'Kirsten_Du…',\n",
- " 'actor_1_FB_likes': 24000,\n",
- " 'actor_2_FB_likes': 11000,\n",
- " 'actor_3_FB_likes': 4000},\n",
- " {'title': 'Tangled',\n",
- " 'actor_1': 'Brad_Garr…',\n",
- " 'actor_2': 'Donna_Mur…',\n",
- " 'actor_3': 'M.C._Gainey',\n",
- " 'actor_1_FB_likes': 799,\n",
- " 'actor_2_FB_likes': 553,\n",
- " 'actor_3_FB_likes': 284}]\n",
+ " [\n",
+ " {\n",
+ " \"title\": \"Avatar\",\n",
+ " \"actor_1\": \"CCH_Pound…\",\n",
+ " \"actor_2\": \"Joel_Davi…\",\n",
+ " \"actor_3\": \"Wes_Studi\",\n",
+ " \"actor_1_FB_likes\": 1000,\n",
+ " \"actor_2_FB_likes\": 936,\n",
+ " \"actor_3_FB_likes\": 855,\n",
+ " },\n",
+ " {\n",
+ " \"title\": \"Pirates_of_the_Car…\",\n",
+ " \"actor_1\": \"Johnny_De…\",\n",
+ " \"actor_2\": \"Orlando_B…\",\n",
+ " \"actor_3\": \"Jack_Daven…\",\n",
+ " \"actor_1_FB_likes\": 40000,\n",
+ " \"actor_2_FB_likes\": 5000,\n",
+ " \"actor_3_FB_likes\": 1000,\n",
+ " },\n",
+ " {\n",
+ " \"title\": \"The_Dark_Knight_Ri…\",\n",
+ " \"actor_1\": \"Tom_Hardy\",\n",
+ " \"actor_2\": \"Christian…\",\n",
+ " \"actor_3\": \"Joseph_Gor…\",\n",
+ " \"actor_1_FB_likes\": 27000,\n",
+ " \"actor_2_FB_likes\": 23000,\n",
+ " \"actor_3_FB_likes\": 23000,\n",
+ " },\n",
+ " {\n",
+ " \"title\": \"John_Carter\",\n",
+ " \"actor_1\": \"Daryl_Sab…\",\n",
+ " \"actor_2\": \"Samantha_…\",\n",
+ " \"actor_3\": \"Polly_Walk…\",\n",
+ " \"actor_1_FB_likes\": 640,\n",
+ " \"actor_2_FB_likes\": 632,\n",
+ " \"actor_3_FB_likes\": 530,\n",
+ " },\n",
+ " {\n",
+ " \"title\": \"Spider-Man_3\",\n",
+ " \"actor_1\": \"J.K._Simm…\",\n",
+ " \"actor_2\": \"James_Fra…\",\n",
+ " \"actor_3\": \"Kirsten_Du…\",\n",
+ " \"actor_1_FB_likes\": 24000,\n",
+ " \"actor_2_FB_likes\": 11000,\n",
+ " \"actor_3_FB_likes\": 4000,\n",
+ " },\n",
+ " {\n",
+ " \"title\": \"Tangled\",\n",
+ " \"actor_1\": \"Brad_Garr…\",\n",
+ " \"actor_2\": \"Donna_Mur…\",\n",
+ " \"actor_3\": \"M.C._Gainey\",\n",
+ " \"actor_1_FB_likes\": 799,\n",
+ " \"actor_2_FB_likes\": 553,\n",
+ " \"actor_3_FB_likes\": 284,\n",
+ " },\n",
+ " ]\n",
")\n",
"\n",
"df"
@@ -6897,7 +7016,7 @@
},
{
"cell_type": "code",
- "execution_count": 51,
+ "execution_count": 52,
"metadata": {},
"outputs": [
{
@@ -7017,16 +7136,16 @@
"Tangled 553 284 "
]
},
- "execution_count": 51,
+ "execution_count": 52,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "df1 = df.set_index('title')\n",
+ "df1 = df.set_index(\"title\")\n",
"header = [re.split(r\"(_?\\d)\", column) for column in df1]\n",
"df1.columns = [f\"{first}{last}{middle}\" for first, middle, last in header]\n",
- "df1\n"
+ "df1"
]
},
{
@@ -7038,7 +7157,7 @@
},
{
"cell_type": "code",
- "execution_count": 52,
+ "execution_count": 53,
"metadata": {},
"outputs": [
{
@@ -7209,18 +7328,20 @@
"Tangled 3 M.C._Gainey 284"
]
},
- "execution_count": 52,
+ "execution_count": 53,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "(pd.wide_to_long(df1.reset_index(), \n",
- " stubnames = ['actor', 'actor_FB_likes'], \n",
- " i = 'title', \n",
- " j = 'group', \n",
- " sep = '_')\n",
- ".rename(columns = {\"actor_FB_likes\" : \"num_likes\"})\n",
+ "(\n",
+ " pd.wide_to_long(\n",
+ " df1.reset_index(),\n",
+ " stubnames=[\"actor\", \"actor_FB_likes\"],\n",
+ " i=\"title\",\n",
+ " j=\"group\",\n",
+ " sep=\"_\",\n",
+ " ).rename(columns={\"actor_FB_likes\": \"num_likes\"})\n",
")"
]
},
@@ -7233,7 +7354,7 @@
},
{
"cell_type": "code",
- "execution_count": 53,
+ "execution_count": 54,
"metadata": {},
"outputs": [
{
@@ -7397,17 +7518,18 @@
"17 Tangled M.C._Gainey 284"
]
},
- "execution_count": 53,
+ "execution_count": 54,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "(df\n",
- ".pivot_longer(index = 'title', \n",
- " names_to = ('.value', '.value'), \n",
- " names_pattern = r\"(.+)_\\d(.*)\")\n",
- ".rename(columns = {'actor_FB_likes' : 'num_likes'})\n",
+ "(\n",
+ " df.pivot_longer(\n",
+ " index=\"title\",\n",
+ " names_to=(\".value\", \".value\"),\n",
+ " names_pattern=r\"(.+)_\\d(.*)\",\n",
+ " ).rename(columns={\"actor_FB_likes\": \"num_likes\"})\n",
")"
]
},
@@ -7420,7 +7542,7 @@
},
{
"cell_type": "code",
- "execution_count": 54,
+ "execution_count": 55,
"metadata": {},
"outputs": [
{
@@ -7584,17 +7706,17 @@
"17 Tangled M.C._Gainey 284"
]
},
- "execution_count": 54,
+ "execution_count": 55,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.pivot_longer(\n",
- " index = 'title',\n",
- " names_to = (\"actor\", \"num_likes\"),\n",
- " names_pattern = ('\\d$', 'likes$'),\n",
- " )"
+ " index=\"title\",\n",
+ " names_to=(\"actor\", \"num_likes\"),\n",
+ " names_pattern=(r\"\\d$\", r\"likes$\"),\n",
+ ")"
]
},
{
@@ -7614,7 +7736,7 @@
},
{
"cell_type": "code",
- "execution_count": 55,
+ "execution_count": 56,
"metadata": {},
"outputs": [
{
@@ -7681,20 +7803,24 @@
"1 1 XYZ 2 NaN 5 R NaN U"
]
},
- "execution_count": 55,
+ "execution_count": 56,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "df = pd.DataFrame({'id': [0, 1],\n",
- " 'Name': ['ABC', 'XYZ'],\n",
- " 'code': [1, 2],\n",
- " 'code1': [4, np.nan],\n",
- " 'code2': ['8', 5],\n",
- " 'type': ['S', 'R'],\n",
- " 'type1': ['E', np.nan],\n",
- " 'type2': ['T', 'U']})\n",
+ "df = pd.DataFrame(\n",
+ " {\n",
+ " \"id\": [0, 1],\n",
+ " \"Name\": [\"ABC\", \"XYZ\"],\n",
+ " \"code\": [1, 2],\n",
+ " \"code1\": [4, np.nan],\n",
+ " \"code2\": [\"8\", 5],\n",
+ " \"type\": [\"S\", \"R\"],\n",
+ " \"type1\": [\"E\", np.nan],\n",
+ " \"type2\": [\"T\", \"U\"],\n",
+ " }\n",
+ ")\n",
"\n",
"df"
]
@@ -7708,7 +7834,7 @@
},
{
"cell_type": "code",
- "execution_count": 56,
+ "execution_count": 57,
"metadata": {},
"outputs": [
{
@@ -7795,17 +7921,17 @@
"5 1 XYZ 5 U"
]
},
- "execution_count": 56,
+ "execution_count": 57,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.pivot_longer(\n",
- " index = [\"id\", \"Name\"],\n",
- " names_to = (\"code_all\", \"type_all\"), \n",
- " names_pattern = (\"^code\", \"^type\")\n",
- " )"
+ " index=[\"id\", \"Name\"],\n",
+ " names_to=(\"code_all\", \"type_all\"),\n",
+ " names_pattern=(\"^code\", \"^type\"),\n",
+ ")"
]
},
{
@@ -7819,7 +7945,7 @@
},
{
"cell_type": "code",
- "execution_count": 57,
+ "execution_count": 58,
"metadata": {},
"outputs": [
{
@@ -7881,27 +8007,28 @@
"0 6.2 5/5/95 6/6/96 3.3 "
]
},
- "execution_count": 57,
+ "execution_count": 58,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.DataFrame(\n",
- " [\n",
- " {\n",
- " \"ID\": 1,\n",
- " \"DateRange1Start\": \"1/1/90\",\n",
- " \"DateRange1End\": \"3/1/90\",\n",
- " \"Value1\": 4.4,\n",
- " \"DateRange2Start\": \"4/5/91\",\n",
- " \"DateRange2End\": \"6/7/91\",\n",
- " \"Value2\": 6.2,\n",
- " \"DateRange3Start\": \"5/5/95\",\n",
- " \"DateRange3End\": \"6/6/96\",\n",
- " \"Value3\": 3.3,\n",
- " }\n",
- " ])\n",
+ " [\n",
+ " {\n",
+ " \"ID\": 1,\n",
+ " \"DateRange1Start\": \"1/1/90\",\n",
+ " \"DateRange1End\": \"3/1/90\",\n",
+ " \"Value1\": 4.4,\n",
+ " \"DateRange2Start\": \"4/5/91\",\n",
+ " \"DateRange2End\": \"6/7/91\",\n",
+ " \"Value2\": 6.2,\n",
+ " \"DateRange3Start\": \"5/5/95\",\n",
+ " \"DateRange3End\": \"6/6/96\",\n",
+ " \"Value3\": 3.3,\n",
+ " }\n",
+ " ]\n",
+ ")\n",
"\n",
"df"
]
@@ -7915,7 +8042,7 @@
},
{
"cell_type": "code",
- "execution_count": 58,
+ "execution_count": 59,
"metadata": {},
"outputs": [
{
@@ -7989,16 +8116,16 @@
"1 6.2 5/5/95 6/6/96 3.3 "
]
},
- "execution_count": 58,
+ "execution_count": 59,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "df1 = df.set_index('ID')\n",
+ "df1 = df.set_index(\"ID\")\n",
"header = [re.split(r\"(\\d)\", column) for column in df1]\n",
"df1.columns = [f\"{first}{last}{middle}\" for first, middle, last in header]\n",
- "df1\n"
+ "df1"
]
},
{
@@ -8010,7 +8137,7 @@
},
{
"cell_type": "code",
- "execution_count": 59,
+ "execution_count": 60,
"metadata": {},
"outputs": [
{
@@ -8079,18 +8206,18 @@
" 3 5/5/95 6/6/96 3.3"
]
},
- "execution_count": 59,
+ "execution_count": 60,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "pd.wide_to_long(df1.reset_index(), \n",
- " stubnames = ['DateRangeStart', \n",
- " 'DateRangeEnd', \n",
- " 'Value'],\n",
- " i = 'ID', \n",
- " j = 'num')"
+ "pd.wide_to_long(\n",
+ " df1.reset_index(),\n",
+ " stubnames=[\"DateRangeStart\", \"DateRangeEnd\", \"Value\"],\n",
+ " i=\"ID\",\n",
+ " j=\"num\",\n",
+ ")"
]
},
{
@@ -8102,7 +8229,7 @@
},
{
"cell_type": "code",
- "execution_count": 60,
+ "execution_count": 61,
"metadata": {},
"outputs": [
{
@@ -8165,17 +8292,17 @@
"2 1 5/5/95 6/6/96 3.3"
]
},
- "execution_count": 60,
+ "execution_count": 61,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.pivot_longer(\n",
- " index = 'ID', \n",
- " names_to = (\"DateRangeStart\", \"DateRangeEnd\", \"Value\"), \n",
- " names_pattern = (\"Start$\", \"End$\", \"^Value\")\n",
- " )"
+ " index=\"ID\",\n",
+ " names_to=(\"DateRangeStart\", \"DateRangeEnd\", \"Value\"),\n",
+ " names_pattern=(\"Start$\", \"End$\", \"^Value\"),\n",
+ ")"
]
},
{
@@ -8194,7 +8321,7 @@
},
{
"cell_type": "code",
- "execution_count": 61,
+ "execution_count": 62,
"metadata": {},
"outputs": [
{
@@ -8257,15 +8384,15 @@
"2 1 5/5/95 6/6/96 3.3"
]
},
- "execution_count": 61,
+ "execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "df.pivot_longer('ID', \n",
- " names_to = ('.value', '.value'), \n",
- " names_pattern=r\"(.+)\\d(.*)\")"
+ "df.pivot_longer(\n",
+ " \"ID\", names_to=(\".value\", \".value\"), names_pattern=r\"(.+)\\d(.*)\"\n",
+ ")"
]
},
{
@@ -8277,7 +8404,7 @@
},
{
"cell_type": "code",
- "execution_count": 62,
+ "execution_count": 63,
"metadata": {},
"outputs": [
{
@@ -8344,20 +8471,24 @@
"1 P2 BB B1 TB1 B2 TB2 B3 TB3"
]
},
- "execution_count": 62,
+ "execution_count": 63,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "df = pd.DataFrame({'Activity': ['P1', 'P2'],\n",
- " 'General': ['AA', 'BB'],\n",
- " 'm1': ['A1', 'B1'],\n",
- " 't1': ['TA1', 'TB1'],\n",
- " 'm2': ['A2', 'B2'],\n",
- " 't2': ['TA2', 'TB2'],\n",
- " 'm3': ['A3', 'B3'],\n",
- " 't3': ['TA3', 'TB3']})\n",
+ "df = pd.DataFrame(\n",
+ " {\n",
+ " \"Activity\": [\"P1\", \"P2\"],\n",
+ " \"General\": [\"AA\", \"BB\"],\n",
+ " \"m1\": [\"A1\", \"B1\"],\n",
+ " \"t1\": [\"TA1\", \"TB1\"],\n",
+ " \"m2\": [\"A2\", \"B2\"],\n",
+ " \"t2\": [\"TA2\", \"TB2\"],\n",
+ " \"m3\": [\"A3\", \"B3\"],\n",
+ " \"t3\": [\"TA3\", \"TB3\"],\n",
+ " }\n",
+ ")\n",
"\n",
"df"
]
@@ -8371,7 +8502,7 @@
},
{
"cell_type": "code",
- "execution_count": 63,
+ "execution_count": 64,
"metadata": {},
"outputs": [
{
@@ -8458,21 +8589,20 @@
"5 P2 BB TB3 B3"
]
},
- "execution_count": 63,
+ "execution_count": 64,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "(pd.wide_to_long(df, \n",
- " i = [\"Activity\", \"General\"], \n",
- " stubnames = [\"t\", \"m\"], \n",
- " j = \"number\")\n",
- " .set_axis([\"Task\", \"M\"], \n",
- " axis = \"columns\")\n",
+ "(\n",
+ " pd.wide_to_long(\n",
+ " df, i=[\"Activity\", \"General\"], stubnames=[\"t\", \"m\"], j=\"number\"\n",
+ " )\n",
+ " .set_axis([\"Task\", \"M\"], axis=\"columns\")\n",
" .droplevel(-1)\n",
" .reset_index()\n",
- " )"
+ ")"
]
},
{
@@ -8484,7 +8614,7 @@
},
{
"cell_type": "code",
- "execution_count": 64,
+ "execution_count": 65,
"metadata": {},
"outputs": [
{
@@ -8571,17 +8701,17 @@
"5 P2 BB B3 TB3"
]
},
- "execution_count": 64,
+ "execution_count": 65,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.pivot_longer(\n",
- " index = ['Activity','General'], \n",
- " names_pattern = ['^m','^t'],\n",
- " names_to = ['M','Task']\n",
- " )"
+ " index=[\"Activity\", \"General\"],\n",
+ " names_pattern=[\"^m\", \"^t\"],\n",
+ " names_to=[\"M\", \"Task\"],\n",
+ ")"
]
},
{
@@ -8596,7 +8726,7 @@
},
{
"cell_type": "code",
- "execution_count": 65,
+ "execution_count": 66,
"metadata": {},
"outputs": [
{
@@ -8676,19 +8806,23 @@
"2 1 5 "
]
},
- "execution_count": 65,
+ "execution_count": 66,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "df = pd.DataFrame({'Name': ['John', 'Chris', 'Alex'],\n",
- " 'activity1': ['Birthday', 'Sleep Over', 'Track Race'],\n",
- " 'number_activity_1': [1, 2, 4],\n",
- " 'attendees1': [14, 18, 100],\n",
- " 'activity2': ['Sleep Over', 'Painting', 'Birthday'],\n",
- " 'number_activity_2': [4, 5, 1],\n",
- " 'attendees2': [10, 8, 5]})\n",
+ "df = pd.DataFrame(\n",
+ " {\n",
+ " \"Name\": [\"John\", \"Chris\", \"Alex\"],\n",
+ " \"activity1\": [\"Birthday\", \"Sleep Over\", \"Track Race\"],\n",
+ " \"number_activity_1\": [1, 2, 4],\n",
+ " \"attendees1\": [14, 18, 100],\n",
+ " \"activity2\": [\"Sleep Over\", \"Painting\", \"Birthday\"],\n",
+ " \"number_activity_2\": [4, 5, 1],\n",
+ " \"attendees2\": [10, 8, 5],\n",
+ " }\n",
+ ")\n",
"\n",
"df"
]
@@ -8704,7 +8838,7 @@
},
{
"cell_type": "code",
- "execution_count": 66,
+ "execution_count": 67,
"metadata": {},
"outputs": [
{
@@ -8791,17 +8925,17 @@
"5 Alex Birthday 1 5"
]
},
- "execution_count": 66,
+ "execution_count": 67,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.pivot_longer(\n",
- " index = 'Name',\n",
- " names_to = ('activity','number_activity','attendees'), \n",
- " names_pattern = (\"^activity\",\"^number_activity\",\"^attendees\")\n",
- " )\n"
+ " index=\"Name\",\n",
+ " names_to=(\"activity\", \"number_activity\", \"attendees\"),\n",
+ " names_pattern=(\"^activity\", \"^number_activity\", \"^attendees\"),\n",
+ ")"
]
},
{
@@ -8816,7 +8950,7 @@
},
{
"cell_type": "code",
- "execution_count": 67,
+ "execution_count": 68,
"metadata": {},
"outputs": [
{
@@ -8898,24 +9032,28 @@
"3 46588 "
]
},
- "execution_count": 67,
+ "execution_count": 68,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "df = pd.DataFrame({'Location': ['Madrid', 'Madrid', 'Rome', 'Rome'],\n",
- " 'Account': ['ABC', 'XYX', 'ABC', 'XYX'],\n",
- " 'Y2019:MTD:January:Expense': [4354, 769867, 434654, 632556456],\n",
- " 'Y2019:MTD:January:Income': [56456, 32556456, 5214, 46724423],\n",
- " 'Y2019:MTD:February:Expense': [235423, 6785423, 235423, 46588]})\n",
+ "df = pd.DataFrame(\n",
+ " {\n",
+ " \"Location\": [\"Madrid\", \"Madrid\", \"Rome\", \"Rome\"],\n",
+ " \"Account\": [\"ABC\", \"XYX\", \"ABC\", \"XYX\"],\n",
+ " \"Y2019:MTD:January:Expense\": [4354, 769867, 434654, 632556456],\n",
+ " \"Y2019:MTD:January:Income\": [56456, 32556456, 5214, 46724423],\n",
+ " \"Y2019:MTD:February:Expense\": [235423, 6785423, 235423, 46588],\n",
+ " }\n",
+ ")\n",
"\n",
"df"
]
},
{
"cell_type": "code",
- "execution_count": 68,
+ "execution_count": 69,
"metadata": {},
"outputs": [
{
@@ -9036,17 +9174,18 @@
"7 Rome XYX 2019 Feb 46588 NaN"
]
},
- "execution_count": 68,
+ "execution_count": 69,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "df.pivot_longer(index = ['Location','Account'],\n",
- " names_to=(\"year\", \"month\", \".value\"),\n",
- " names_pattern=r\"Y(.+):MTD:(.{3}).+(Income|Expense)\",\n",
- " sort_by_appearance=True)\n",
- "\n"
+ "df.pivot_longer(\n",
+ " index=[\"Location\", \"Account\"],\n",
+ " names_to=(\"year\", \"month\", \".value\"),\n",
+ " names_pattern=r\"Y(.+):MTD:(.{3}).+(Income|Expense)\",\n",
+ " sort_by_appearance=True,\n",
+ ")"
]
},
{
@@ -9075,7 +9214,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.9.9"
+ "version": "3.9.16"
}
},
"nbformat": 4,
diff --git a/examples/notebooks/anime.ipynb b/examples/notebooks/anime.ipynb
index fae98321d..b74e42dc9 100644
--- a/examples/notebooks/anime.ipynb
+++ b/examples/notebooks/anime.ipynb
@@ -73,7 +73,7 @@
"metadata": {},
"outputs": [],
"source": [
- "filename = 'https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2019/2019-04-23/raw_anime.csv'\n",
+ "filename = \"https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2019/2019-04-23/raw_anime.csv\"\n",
"df = pd.read_csv(filename)\n",
"\n",
"\n",
@@ -124,10 +124,11 @@
" stop: int = None,\n",
" pat: str = \" \",\n",
" *args,\n",
- " **kwargs\n",
+ " **kwargs,\n",
"):\n",
" \"\"\"\n",
- " Wrapper around `df.str.split` with additional `start` and `end` arguments\n",
+ " Wrapper around `df.str.split`\n",
+ " with additional `start` and `end` arguments\n",
" to select a slice of the list of words.\n",
" \"\"\"\n",
"\n",
@@ -148,7 +149,12 @@
"\n",
"@pf.register_dataframe_method\n",
"def str_slice(\n",
- " df, column_name: str, start: int = None, stop: int = None, *args, **kwargs\n",
+ " df, \n",
+ " column_name: str,\n",
+ " start: int = None, \n",
+ " stop: int = None, \n",
+ " *args, \n",
+ " **kwargs\n",
"):\n",
" \"\"\"\n",
" Wrapper around `df.str.slice\n",
@@ -175,7 +181,9 @@
" .str_word(column_name=\"aired\", start=0, stop=2, pat=\",\")\n",
" .str_join(column_name=\"aired\", sep=\",\")\n",
" .deconcatenate_column(\n",
- " column_name=\"aired\", new_column_names=[\"start_date\", \"end_date\"], sep=\",\"\n",
+ " column_name=\"aired\",\n",
+ " new_column_names=[\"start_date\", \"end_date\"],\n",
+ " sep=\",\",\n",
" )\n",
" .remove_columns(column_names=[\"aired\"])\n",
" .str_remove(column_name=\"start_date\", pat=\"'\")\n",
@@ -858,19 +866,22 @@
"outputs": [],
"source": [
"@pf.register_dataframe_method\n",
- "def str_remove(df, column_name: str, pat: str, *args, **kwargs):\n",
+ "def str_remove(df, column_name: str, pat: str, *args, **kwargs): # noqa: F811\n",
" \"\"\"\n",
" Wrapper around df.str.replace\n",
- " The function will loop through regex patterns and remove them from the desired column.\n",
+ " The function will loop through regex patterns \n",
+ " and remove them from the desired column.\n",
"\n",
" :param df: A pandas DataFrame.\n",
- " :param column_name: A `str` indicating which column the string removal action is to be made.\n",
+ " :param column_name: A `str` indicating which column \n",
+ " the string removal action is to be made.\n",
" :param pat: A regex pattern to match and remove.\n",
" \"\"\"\n",
"\n",
" if not isinstance(pat, str):\n",
" raise TypeError(\n",
- " f\"Pattern should be a valid regex pattern. Received pattern: {pat} with dtype: {type(pat)}\"\n",
+ " f\"Pattern should be a valid regex pattern. \"\n",
+ " f\"Received pattern: {pat} with dtype: {type(pat)}\"\n",
" )\n",
" df[column_name] = df[column_name].str.replace(pat, \"\", *args, **kwargs)\n",
" return df"
@@ -939,13 +950,17 @@
"outputs": [],
"source": [
"@pf.register_dataframe_method\n",
- "def explode(df: pd.DataFrame, column_name: str, sep: str):\n",
+ "def explode(df: pd.DataFrame, column_name: str, sep: str): # noqa: F811\n",
" \"\"\"\n",
- " For rows with a list of values, this function will create new rows for each value in the list\n",
+ " For rows with a list of values,\n",
+ " this function will create new rows\n",
+ " for each value in the list\n",
"\n",
" :param df: A pandas DataFrame.\n",
- " :param column_name: A `str` indicating which column the string removal action is to be made.\n",
- " :param sep: The delimiter. Example delimiters include `|`, `, `, `,` etc.\n",
+ " :param column_name: A `str` indicating which column\n",
+ " the string removal action is to be made.\n",
+ " :param sep: The delimiter.\n",
+ " Example delimiters include `|`, `, `, `,` etc.\n",
" \"\"\"\n",
"\n",
" df[\"id\"] = df.index\n",
@@ -1046,7 +1061,7 @@
"outputs": [],
"source": [
"@pf.register_dataframe_method\n",
- "def str_trim(df, column_name: str, *args, **kwargs):\n",
+ "def str_trim(df, column_name: str, *args, **kwargs): #noqa: F811\n",
" \"\"\"Remove trailing and leading characters, in a given column\"\"\"\n",
" df[column_name] = df[column_name].str.strip(*args, **kwargs)\n",
" return df"
@@ -1300,7 +1315,7 @@
"outputs": [],
"source": [
"@pf.register_dataframe_method\n",
- "def str_word(\n",
+ "def str_word( #noqa: F811\n",
" df,\n",
" column_name: str,\n",
" start: int = None,\n",
@@ -1308,16 +1323,19 @@
" pat: str = \" \",\n",
" *args,\n",
" **kwargs\n",
- "):\n",
+ "): #noqa: F811\n",
" \"\"\"\n",
- " Wrapper around `df.str.split` with additional `start` and `end` arguments\n",
+ " Wrapper around `df.str.split`,\n",
+ " with additional `start` and `end` arguments\n",
" to select a slice of the list of words.\n",
"\n",
" :param df: A pandas DataFrame.\n",
- " :param column_name: A `str` indicating which column the split action is to be made.\n",
+ " :param column_name: A `str` indicating which column \n",
+ " the split action is to be made.\n",
" :param start: optional An `int` for the start index of the slice\n",
" :param stop: optional An `int` for the end index of the slice\n",
- " :param pat: String or regular expression to split on. If not specified, split on whitespace.\n",
+ " :param pat: String or regular expression to split on. \n",
+ " If not specified, split on whitespace.\n",
"\n",
" \"\"\"\n",
" df[column_name] = df[column_name].str.split(pat).str[start:stop]\n",
@@ -1325,29 +1343,32 @@
"\n",
"\n",
"@pf.register_dataframe_method\n",
- "def str_join(df, column_name: str, sep: str, *args, **kwargs):\n",
+ "def str_join(df, column_name: str, sep: str, *args, **kwargs): #noqa: F811\n",
" \"\"\"\n",
" Wrapper around `df.str.join`\n",
" Joins items in a list.\n",
"\n",
" :param df: A pandas DataFrame.\n",
- " :param column_name: A `str` indicating which column the split action is to be made.\n",
- " :param sep: The delimiter. Example delimiters include `|`, `, `, `,` etc.\n",
+ " :param column_name: A `str` indicating which column \n",
+ " the split action is to be made.\n",
+ " :param sep: The delimiter. Example delimiters \n",
+ " include `|`, `, `, `,` etc.\n",
" \"\"\"\n",
" df[column_name] = df[column_name].str.join(sep)\n",
" return df\n",
"\n",
"\n",
"@pf.register_dataframe_method\n",
- "def str_slice(\n",
+ "def str_slice( #noqa: F811\n",
" df, column_name: str, start: int = None, stop: int = None, *args, **kwargs\n",
- "):\n",
+ "): #noqa: F811\n",
" \"\"\"\n",
" Wrapper around `df.str.slice\n",
" Slices strings.\n",
"\n",
" :param df: A pandas DataFrame.\n",
- " :param column_name: A `str` indicating which column the split action is to be made.\n",
+ " :param column_name: A `str` indicating which column \n",
+ " the split action is to be made.\n",
" :param start: 'int' indicating start of slice.\n",
" :param stop: 'int' indicating stop of slice.\n",
" \"\"\"\n",
@@ -1745,7 +1766,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.7.6"
+ "version": "3.9.16"
}
},
"nbformat": 4,
diff --git a/examples/notebooks/bird_call.ipynb b/examples/notebooks/bird_call.ipynb
index ef3c765cb..36f54c016 100644
--- a/examples/notebooks/bird_call.ipynb
+++ b/examples/notebooks/bird_call.ipynb
@@ -597,7 +597,8 @@
"source": [
"clean_birds = (\n",
" raw_birds\n",
- " .merge(clean_call, how='left') # merge the raw_birds dataframe with clean_raw dataframe\n",
+ " # merge the raw_birds dataframe with clean_raw dataframe\n",
+ " .merge(clean_call, how='left') \n",
" .select_columns(\n",
" [\n",
" \"Genus\",\n",
@@ -611,9 +612,11 @@
" ]\n",
" ) # include list of cols\n",
" .clean_names()\n",
- " .rename_column(\"collisions\", \"family\") # rename 'collisions' column to 'family' in merged dataframe\n",
+ " # rename 'collisions' column to 'family' in merged dataframe\n",
+ " .rename_column(\"collisions\", \"family\") \n",
" .rename_column(\"call\", \"flight_call\")\n",
- " .dropna() # drop all rows which contain a NaN\n",
+ " # drop all rows which contain a NaN\n",
+ " .dropna() \n",
")"
]
},
@@ -755,7 +758,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.7.6"
+ "version": "3.9.16"
}
},
"nbformat": 4,
diff --git a/examples/notebooks/board_games.ipynb b/examples/notebooks/board_games.ipynb
index 7f44eaa0d..d7af16708 100644
--- a/examples/notebooks/board_games.ipynb
+++ b/examples/notebooks/board_games.ipynb
@@ -49,12 +49,16 @@
"outputs": [],
"source": [
"cleaned_df = (\n",
+ " # ingest raw data\n",
" pd.read_csv(\n",
" \"https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2019/2019-03-12//board_games.csv\"\n",
- " ) # ingest raw data\n",
- " .clean_names() # removes whitespace, punctuation/symbols, capitalization\n",
- " .remove_empty() # removes entirely empty rows / columns\n",
- " .drop(columns=[\"image\", \"thumbnail\", \"compilation\", \"game_id\"]) # drops unnecessary columns\n",
+ " ) \n",
+ " # removes whitespace, punctuation/symbols, capitalization\n",
+ " .clean_names() \n",
+ " # removes entirely empty rows / columns\n",
+ " .remove_empty() \n",
+ " # drops unnecessary columns\n",
+ " .drop(columns=[\"image\", \"thumbnail\", \"compilation\", \"game_id\"]) \n",
")"
]
},
@@ -947,7 +951,7 @@
"outputs": [
{
"data": {
- "image/png": "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\n",
+ "image/png": "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",
"text/plain": [
"