{
"cells": [
{
"cell_type": "markdown",
"id": "2e977f26",
"metadata": {},
"source": [
"# Kombinieren und Zusammenführen von Datensätzen\n",
"\n",
"Daten, die in pandas-Objekten enthalten sind, können auf verschiedene Weise kombiniert werden:\n",
"\n",
"* [pandas.merge](https://pandas.pydata.org/docs/reference/api/pandas.merge.html) führt Zeilen in DataFrames anhand eines oder mehrerer Schlüssel zusammen. Diese Funktion ist aus SQL oder anderen relationalen Datenbanken bekannt, da sie Datenbank-Join-Operationen implementiert.\n",
"* [pandas.concat](https://pandas.pydata.org/docs/reference/api/pandas.concat.html) verkettet oder stapelt Objekte entlang einer Achse.\n",
"* Die Instanzmethoden [pandas.DataFrame.combine_first](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.combine_first.html) oder [pandas.Series.combine_first](https://pandas.pydata.org/docs/reference/api/pandas.Series.combine_first.html) ermöglichen das Verknüpfen überlappender Daten.\n",
"* [pandas.merge_asof](https://pandas.pydata.org/docs/reference/api/pandas.merge_asof.html) führt eine Verknüpfung nach Schlüsselabstand durch."
]
},
{
"cell_type": "markdown",
"id": "8c707380",
"metadata": {},
"source": [
"## Datenbankähnliche DataFrame-Verknüpfungen\n",
"\n",
"Merge- oder Join-Operationen kombinieren Datensätze, indem sie Zeilen anhand eines oder mehrerer Schlüssel verknüpfen. Diese Operationen sind besonders wichtig in relationalen, SQL-basierten Datenbanken. Die Merge-Funktion in pandas ist der zentrale Einstiegspunkt für die Anwendung dieser Algorithmen auf Ihre Daten."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "0b80668e",
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-21T16:10:04.431566Z",
"iopub.status.busy": "2026-05-21T16:10:04.431433Z",
"iopub.status.idle": "2026-05-21T16:10:04.710912Z",
"shell.execute_reply": "2026-05-21T16:10:04.710498Z",
"shell.execute_reply.started": "2026-05-21T16:10:04.431550Z"
}
},
"outputs": [],
"source": [
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "72210736-28ca-44a2-9c2b-8badfba2103d",
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-21T16:10:04.711560Z",
"iopub.status.busy": "2026-05-21T16:10:04.711430Z",
"iopub.status.idle": "2026-05-21T16:10:04.714552Z",
"shell.execute_reply": "2026-05-21T16:10:04.714294Z",
"shell.execute_reply.started": "2026-05-21T16:10:04.711552Z"
}
},
"outputs": [],
"source": [
"encoding = pd.DataFrame(\n",
" {\n",
" \"Unicode\": [\n",
" \"U+0000\",\n",
" \"U+0001\",\n",
" \"U+0002\",\n",
" \"U+0003\",\n",
" \"U+0004\",\n",
" \"U+0005\",\n",
" ],\n",
" \"Decimal\": [0, 1, 2, 3, 4, 5],\n",
" \"Octal\": [\"000\", \"001\", \"002\", \"003\", \"004\", \"005\"],\n",
" \"Key\": [\"NUL\", \"Ctrl-A\", \"Ctrl-B\", \"Ctrl-C\", \"Ctrl-D\", \"Ctrl-E\"],\n",
" },\n",
")\n",
"\n",
"update = pd.DataFrame(\n",
" {\n",
" \"Unicode\": [\n",
" \"U+0003\",\n",
" \"U+0004\",\n",
" \"U+0005\",\n",
" \"U+0006\",\n",
" \"U+0007\",\n",
" \"U+0008\",\n",
" \"U+0009\",\n",
" ],\n",
" \"Decimal\": [3, 4, 5, 6, 7, 8, 9],\n",
" \"Octal\": [\"003\", \"004\", \"005\", \"006\", \"007\", \"008\", \"009\"],\n",
" \"Key\": [\n",
" \"Ctrl-C\",\n",
" \"Ctrl-D\",\n",
" \"Ctrl-E\",\n",
" \"Ctrl-F\",\n",
" \"Ctrl-G\",\n",
" \"Ctrl-H\",\n",
" \"Ctrl-I\",\n",
" ],\n",
" },\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "37191511-b474-40d8-9a39-d785f678948c",
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-21T16:10:04.715062Z",
"iopub.status.busy": "2026-05-21T16:10:04.714975Z",
"iopub.status.idle": "2026-05-21T16:10:04.720544Z",
"shell.execute_reply": "2026-05-21T16:10:04.720285Z",
"shell.execute_reply.started": "2026-05-21T16:10:04.715055Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Unicode | \n",
" Decimal | \n",
" Octal | \n",
" Key | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" U+0000 | \n",
" 0 | \n",
" 000 | \n",
" NUL | \n",
"
\n",
" \n",
" | 1 | \n",
" U+0001 | \n",
" 1 | \n",
" 001 | \n",
" Ctrl-A | \n",
"
\n",
" \n",
" | 2 | \n",
" U+0002 | \n",
" 2 | \n",
" 002 | \n",
" Ctrl-B | \n",
"
\n",
" \n",
" | 3 | \n",
" U+0003 | \n",
" 3 | \n",
" 003 | \n",
" Ctrl-C | \n",
"
\n",
" \n",
" | 4 | \n",
" U+0004 | \n",
" 4 | \n",
" 004 | \n",
" Ctrl-D | \n",
"
\n",
" \n",
" | 5 | \n",
" U+0005 | \n",
" 5 | \n",
" 005 | \n",
" Ctrl-E | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Unicode Decimal Octal Key\n",
"0 U+0000 0 000 NUL\n",
"1 U+0001 1 001 Ctrl-A\n",
"2 U+0002 2 002 Ctrl-B\n",
"3 U+0003 3 003 Ctrl-C\n",
"4 U+0004 4 004 Ctrl-D\n",
"5 U+0005 5 005 Ctrl-E"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"encoding"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "eb975aa7",
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-21T16:10:04.721103Z",
"iopub.status.busy": "2026-05-21T16:10:04.721013Z",
"iopub.status.idle": "2026-05-21T16:10:04.724515Z",
"shell.execute_reply": "2026-05-21T16:10:04.724236Z",
"shell.execute_reply.started": "2026-05-21T16:10:04.721095Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Unicode | \n",
" Decimal | \n",
" Octal | \n",
" Key | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" U+0003 | \n",
" 3 | \n",
" 003 | \n",
" Ctrl-C | \n",
"
\n",
" \n",
" | 1 | \n",
" U+0004 | \n",
" 4 | \n",
" 004 | \n",
" Ctrl-D | \n",
"
\n",
" \n",
" | 2 | \n",
" U+0005 | \n",
" 5 | \n",
" 005 | \n",
" Ctrl-E | \n",
"
\n",
" \n",
" | 3 | \n",
" U+0006 | \n",
" 6 | \n",
" 006 | \n",
" Ctrl-F | \n",
"
\n",
" \n",
" | 4 | \n",
" U+0007 | \n",
" 7 | \n",
" 007 | \n",
" Ctrl-G | \n",
"
\n",
" \n",
" | 5 | \n",
" U+0008 | \n",
" 8 | \n",
" 008 | \n",
" Ctrl-H | \n",
"
\n",
" \n",
" | 6 | \n",
" U+0009 | \n",
" 9 | \n",
" 009 | \n",
" Ctrl-I | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Unicode Decimal Octal Key\n",
"0 U+0003 3 003 Ctrl-C\n",
"1 U+0004 4 004 Ctrl-D\n",
"2 U+0005 5 005 Ctrl-E\n",
"3 U+0006 6 006 Ctrl-F\n",
"4 U+0007 7 007 Ctrl-G\n",
"5 U+0008 8 008 Ctrl-H\n",
"6 U+0009 9 009 Ctrl-I"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"update"
]
},
{
"cell_type": "markdown",
"id": "ce2f4cab",
"metadata": {},
"source": [
"Wenn wir `df.merge()` aufrufen, erhalten wir:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "3c3df196",
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-21T16:10:04.724964Z",
"iopub.status.busy": "2026-05-21T16:10:04.724890Z",
"iopub.status.idle": "2026-05-21T16:10:04.728987Z",
"shell.execute_reply": "2026-05-21T16:10:04.728679Z",
"shell.execute_reply.started": "2026-05-21T16:10:04.724957Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Unicode | \n",
" Decimal | \n",
" Octal | \n",
" Key | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" U+0003 | \n",
" 3 | \n",
" 003 | \n",
" Ctrl-C | \n",
"
\n",
" \n",
" | 1 | \n",
" U+0004 | \n",
" 4 | \n",
" 004 | \n",
" Ctrl-D | \n",
"
\n",
" \n",
" | 2 | \n",
" U+0005 | \n",
" 5 | \n",
" 005 | \n",
" Ctrl-E | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Unicode Decimal Octal Key\n",
"0 U+0003 3 003 Ctrl-C\n",
"1 U+0004 4 004 Ctrl-D\n",
"2 U+0005 5 005 Ctrl-E"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"encoding.merge(update)"
]
},
{
"cell_type": "markdown",
"id": "cd0a1598",
"metadata": {},
"source": [
"Standardmäßig führt `merge` einen sogenannten *Inner Join* durch; die Schlüssel im Ergebnis sind die Schnittmenge oder die gemeinsamen Elemente beider Tabellen."
]
},
{
"cell_type": "markdown",
"id": "7e4b3cfe",
"metadata": {},
"source": [
"\n",
"\n",
"**Hinweis:**\n",
"\n",
"Ich habe nicht angegeben, über welcher Spalte die Zusammenführung erfolgen soll. Wenn diese Information nicht angegeben wird, verwendet `merge` die übereinstimmenden Spaltennamen als Schlüssel. Es empfiehlt sich jedoch, dies explizit anzugeben:\n",
"
"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "e3ac98a4",
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-21T16:10:04.730204Z",
"iopub.status.busy": "2026-05-21T16:10:04.730111Z",
"iopub.status.idle": "2026-05-21T16:10:04.733912Z",
"shell.execute_reply": "2026-05-21T16:10:04.733622Z",
"shell.execute_reply.started": "2026-05-21T16:10:04.730196Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Unicode | \n",
" Decimal_x | \n",
" Octal_x | \n",
" Key_x | \n",
" Decimal_y | \n",
" Octal_y | \n",
" Key_y | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" U+0003 | \n",
" 3 | \n",
" 003 | \n",
" Ctrl-C | \n",
" 3 | \n",
" 003 | \n",
" Ctrl-C | \n",
"
\n",
" \n",
" | 1 | \n",
" U+0004 | \n",
" 4 | \n",
" 004 | \n",
" Ctrl-D | \n",
" 4 | \n",
" 004 | \n",
" Ctrl-D | \n",
"
\n",
" \n",
" | 2 | \n",
" U+0005 | \n",
" 5 | \n",
" 005 | \n",
" Ctrl-E | \n",
" 5 | \n",
" 005 | \n",
" Ctrl-E | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Unicode Decimal_x Octal_x Key_x Decimal_y Octal_y Key_y\n",
"0 U+0003 3 003 Ctrl-C 3 003 Ctrl-C\n",
"1 U+0004 4 004 Ctrl-D 4 004 Ctrl-D\n",
"2 U+0005 5 005 Ctrl-E 5 005 Ctrl-E"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"encoding.merge(update, on=\"Unicode\")"
]
},
{
"cell_type": "markdown",
"id": "f1e243d4",
"metadata": {},
"source": [
"Wenn die Spaltennamen in den einzelnen Objekten unterschiedlich sind, könnt ihr sie separat angeben. Im folgenden Beispiel erhält `update2` den Schlüssel `U+` und nicht `Unicode`:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "9d310a26",
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-21T16:10:04.734368Z",
"iopub.status.busy": "2026-05-21T16:10:04.734285Z",
"iopub.status.idle": "2026-05-21T16:10:04.738369Z",
"shell.execute_reply": "2026-05-21T16:10:04.738145Z",
"shell.execute_reply.started": "2026-05-21T16:10:04.734361Z"
},
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Unicode | \n",
" Decimal_x | \n",
" Octal_x | \n",
" Key_x | \n",
" U+ | \n",
" Decimal_y | \n",
" Octal_y | \n",
" Key_y | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" U+0003 | \n",
" 3 | \n",
" 003 | \n",
" Ctrl-C | \n",
" U+0003 | \n",
" 3 | \n",
" 003 | \n",
" Ctrl-C | \n",
"
\n",
" \n",
" | 1 | \n",
" U+0004 | \n",
" 4 | \n",
" 004 | \n",
" Ctrl-D | \n",
" U+0004 | \n",
" 4 | \n",
" 004 | \n",
" Ctrl-D | \n",
"
\n",
" \n",
" | 2 | \n",
" U+0005 | \n",
" 5 | \n",
" 005 | \n",
" Ctrl-E | \n",
" U+0005 | \n",
" 5 | \n",
" 005 | \n",
" Ctrl-E | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Unicode Decimal_x Octal_x Key_x U+ Decimal_y Octal_y Key_y\n",
"0 U+0003 3 003 Ctrl-C U+0003 3 003 Ctrl-C\n",
"1 U+0004 4 004 Ctrl-D U+0004 4 004 Ctrl-D\n",
"2 U+0005 5 005 Ctrl-E U+0005 5 005 Ctrl-E"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"update2 = pd.DataFrame(\n",
" {\n",
" \"U+\": [\n",
" \"U+0003\",\n",
" \"U+0004\",\n",
" \"U+0005\",\n",
" \"U+0006\",\n",
" \"U+0007\",\n",
" \"U+0008\",\n",
" \"U+0009\",\n",
" ],\n",
" \"Decimal\": [3, 4, 5, 6, 7, 8, 9],\n",
" \"Octal\": [\"003\", \"004\", \"005\", \"006\", \"007\", \"008\", \"009\"],\n",
" \"Key\": [\n",
" \"Ctrl-C\",\n",
" \"Ctrl-D\",\n",
" \"Ctrl-E\",\n",
" \"Ctrl-F\",\n",
" \"Ctrl-G\",\n",
" \"Ctrl-H\",\n",
" \"Ctrl-I\",\n",
" ],\n",
" },\n",
")\n",
"\n",
"encoding.merge(update2, left_on=\"Unicode\", right_on=\"U+\")"
]
},
{
"cell_type": "markdown",
"id": "3978abc4",
"metadata": {},
"source": [
"Ihr könnt `.merge` jedoch nicht nur für einen Inner Join verwenden, bei dem die Schlüssel im Ergebnis die Schnittmenge oder die gemeinsamen Elemente beider Tabellen sind. Weitere mögliche Optionen sind:\n",
"\n",
"Option | Verhalten\n",
":----- | :--------\n",
"`how='inner'` | verwendet nur die Schlüsselkombinationen, die in beiden Tabellen vorkommen\n",
"`how='left'` | verwendet alle Schlüsselkombinationen, die in der linken Tabelle vorkommen\n",
"`how='right'` | verwendet alle Schlüsselkombinationen, die in der rechten Tabelle vorkommen\n",
"`how='outer'` | verwendet alle Schlüsselkombinationen, die in beiden Tabellen vorkommen"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "1c33c487",
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-21T16:10:04.738722Z",
"iopub.status.busy": "2026-05-21T16:10:04.738658Z",
"iopub.status.idle": "2026-05-21T16:10:04.743583Z",
"shell.execute_reply": "2026-05-21T16:10:04.743350Z",
"shell.execute_reply.started": "2026-05-21T16:10:04.738715Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Unicode | \n",
" Decimal_x | \n",
" Octal_x | \n",
" Key_x | \n",
" Decimal_y | \n",
" Octal_y | \n",
" Key_y | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" U+0000 | \n",
" 0 | \n",
" 000 | \n",
" NUL | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" | 1 | \n",
" U+0001 | \n",
" 1 | \n",
" 001 | \n",
" Ctrl-A | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" | 2 | \n",
" U+0002 | \n",
" 2 | \n",
" 002 | \n",
" Ctrl-B | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" | 3 | \n",
" U+0003 | \n",
" 3 | \n",
" 003 | \n",
" Ctrl-C | \n",
" 3.0 | \n",
" 003 | \n",
" Ctrl-C | \n",
"
\n",
" \n",
" | 4 | \n",
" U+0004 | \n",
" 4 | \n",
" 004 | \n",
" Ctrl-D | \n",
" 4.0 | \n",
" 004 | \n",
" Ctrl-D | \n",
"
\n",
" \n",
" | 5 | \n",
" U+0005 | \n",
" 5 | \n",
" 005 | \n",
" Ctrl-E | \n",
" 5.0 | \n",
" 005 | \n",
" Ctrl-E | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Unicode Decimal_x Octal_x Key_x Decimal_y Octal_y Key_y\n",
"0 U+0000 0 000 NUL NaN NaN NaN\n",
"1 U+0001 1 001 Ctrl-A NaN NaN NaN\n",
"2 U+0002 2 002 Ctrl-B NaN NaN NaN\n",
"3 U+0003 3 003 Ctrl-C 3.0 003 Ctrl-C\n",
"4 U+0004 4 004 Ctrl-D 4.0 004 Ctrl-D\n",
"5 U+0005 5 005 Ctrl-E 5.0 005 Ctrl-E"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"encoding.merge(update, on=\"Unicode\", how=\"left\")"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "5a959622",
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-21T16:10:04.744083Z",
"iopub.status.busy": "2026-05-21T16:10:04.743990Z",
"iopub.status.idle": "2026-05-21T16:10:04.749312Z",
"shell.execute_reply": "2026-05-21T16:10:04.749071Z",
"shell.execute_reply.started": "2026-05-21T16:10:04.744076Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Unicode | \n",
" Decimal_x | \n",
" Octal_x | \n",
" Key_x | \n",
" Decimal_y | \n",
" Octal_y | \n",
" Key_y | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" U+0000 | \n",
" 0.0 | \n",
" 000 | \n",
" NUL | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" | 1 | \n",
" U+0001 | \n",
" 1.0 | \n",
" 001 | \n",
" Ctrl-A | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" | 2 | \n",
" U+0002 | \n",
" 2.0 | \n",
" 002 | \n",
" Ctrl-B | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" | 3 | \n",
" U+0003 | \n",
" 3.0 | \n",
" 003 | \n",
" Ctrl-C | \n",
" 3.0 | \n",
" 003 | \n",
" Ctrl-C | \n",
"
\n",
" \n",
" | 4 | \n",
" U+0004 | \n",
" 4.0 | \n",
" 004 | \n",
" Ctrl-D | \n",
" 4.0 | \n",
" 004 | \n",
" Ctrl-D | \n",
"
\n",
" \n",
" | 5 | \n",
" U+0005 | \n",
" 5.0 | \n",
" 005 | \n",
" Ctrl-E | \n",
" 5.0 | \n",
" 005 | \n",
" Ctrl-E | \n",
"
\n",
" \n",
" | 6 | \n",
" U+0006 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" 6.0 | \n",
" 006 | \n",
" Ctrl-F | \n",
"
\n",
" \n",
" | 7 | \n",
" U+0007 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" 7.0 | \n",
" 007 | \n",
" Ctrl-G | \n",
"
\n",
" \n",
" | 8 | \n",
" U+0008 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" 8.0 | \n",
" 008 | \n",
" Ctrl-H | \n",
"
\n",
" \n",
" | 9 | \n",
" U+0009 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" 9.0 | \n",
" 009 | \n",
" Ctrl-I | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Unicode Decimal_x Octal_x Key_x Decimal_y Octal_y Key_y\n",
"0 U+0000 0.0 000 NUL NaN NaN NaN\n",
"1 U+0001 1.0 001 Ctrl-A NaN NaN NaN\n",
"2 U+0002 2.0 002 Ctrl-B NaN NaN NaN\n",
"3 U+0003 3.0 003 Ctrl-C 3.0 003 Ctrl-C\n",
"4 U+0004 4.0 004 Ctrl-D 4.0 004 Ctrl-D\n",
"5 U+0005 5.0 005 Ctrl-E 5.0 005 Ctrl-E\n",
"6 U+0006 NaN NaN NaN 6.0 006 Ctrl-F\n",
"7 U+0007 NaN NaN NaN 7.0 007 Ctrl-G\n",
"8 U+0008 NaN NaN NaN 8.0 008 Ctrl-H\n",
"9 U+0009 NaN NaN NaN 9.0 009 Ctrl-I"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"encoding.merge(update, on=\"Unicode\", how=\"outer\")"
]
},
{
"cell_type": "markdown",
"id": "fd6c3638",
"metadata": {},
"source": [
"Die Join-Methode wirkt sich nur auf die eindeutigen Schlüsselwerte aus, die im Ergebnis erscheinen."
]
},
{
"cell_type": "markdown",
"id": "843d8e88",
"metadata": {},
"source": [
"Um mehrere Schlüssel zu verknüpfen, könnt ihr eine Liste mit Spaltennamen übergeben:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "5891c418",
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-21T16:10:04.749767Z",
"iopub.status.busy": "2026-05-21T16:10:04.749664Z",
"iopub.status.idle": "2026-05-21T16:10:04.754138Z",
"shell.execute_reply": "2026-05-21T16:10:04.753963Z",
"shell.execute_reply.started": "2026-05-21T16:10:04.749759Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Unicode | \n",
" Decimal | \n",
" Octal | \n",
" Key | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" U+0000 | \n",
" 0 | \n",
" 000 | \n",
" NUL | \n",
"
\n",
" \n",
" | 1 | \n",
" U+0001 | \n",
" 1 | \n",
" 001 | \n",
" Ctrl-A | \n",
"
\n",
" \n",
" | 2 | \n",
" U+0002 | \n",
" 2 | \n",
" 002 | \n",
" Ctrl-B | \n",
"
\n",
" \n",
" | 3 | \n",
" U+0003 | \n",
" 3 | \n",
" 003 | \n",
" Ctrl-C | \n",
"
\n",
" \n",
" | 4 | \n",
" U+0004 | \n",
" 4 | \n",
" 004 | \n",
" Ctrl-D | \n",
"
\n",
" \n",
" | 5 | \n",
" U+0005 | \n",
" 5 | \n",
" 005 | \n",
" Ctrl-E | \n",
"
\n",
" \n",
" | 6 | \n",
" U+0006 | \n",
" 6 | \n",
" 006 | \n",
" Ctrl-F | \n",
"
\n",
" \n",
" | 7 | \n",
" U+0007 | \n",
" 7 | \n",
" 007 | \n",
" Ctrl-G | \n",
"
\n",
" \n",
" | 8 | \n",
" U+0008 | \n",
" 8 | \n",
" 008 | \n",
" Ctrl-H | \n",
"
\n",
" \n",
" | 9 | \n",
" U+0009 | \n",
" 9 | \n",
" 009 | \n",
" Ctrl-I | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Unicode Decimal Octal Key\n",
"0 U+0000 0 000 NUL\n",
"1 U+0001 1 001 Ctrl-A\n",
"2 U+0002 2 002 Ctrl-B\n",
"3 U+0003 3 003 Ctrl-C\n",
"4 U+0004 4 004 Ctrl-D\n",
"5 U+0005 5 005 Ctrl-E\n",
"6 U+0006 6 006 Ctrl-F\n",
"7 U+0007 7 007 Ctrl-G\n",
"8 U+0008 8 008 Ctrl-H\n",
"9 U+0009 9 009 Ctrl-I"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"encoding.merge(update, on=[\"Unicode\", \"Decimal\", \"Octal\", \"Key\"], how=\"outer\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3.13 Kernel",
"language": "python",
"name": "python313"
},
"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.0"
},
"widgets": {
"application/vnd.jupyter.widget-state+json": {
"state": {},
"version_major": 2,
"version_minor": 0
}
}
},
"nbformat": 4,
"nbformat_minor": 5
}