[PYTHON] Verwenden Sie den Indikator mit pd.merge

Überblick

Es gibt ein Argument namens "Indikator" beim Zusammenführen mit Pandas, aber obwohl es sehr praktisch ist, habe ich das Gefühl, dass es nur wenige Leute gibt, die es verwenden. Dies ist also ein Artikel zum Zweck der Verbreitung.

In der Dokumentation heißt es wie folgt.

indicator : bool or str, default False If True, adds a column to output DataFrame called “_merge” with information on the source of each row. If string, column with information on source of each row will be added to output DataFrame, and column will be named value of string. Information column is Categorical-type and takes on a value of “left_only” for observations whose merge key only appears in ‘left’ DataFrame, “right_only” for observations whose merge key only appears in ‘right’ DataFrame, and “both” if the observation’s merge key is found in both.

Wenn Sie links beitreten, gehen im Allgemeinen alle Datensätze verloren, die nur in den Daten links vorhanden sind, und gehen zum Zeitpunkt der Zusammenführung verloren. Bei der Analyse von Daten ist es jedoch häufig der Fall, dass Sie sehen möchten, wie die Datensätze verknüpft sind und welche Datensätze nicht verknüpft sind. Wenn Sie normal zusammenführen, ist es ziemlich mühsam, dies zu überprüfen, oder später werden Sie feststellen, dass es überhaupt nicht gebunden ist und es sich um eine Katastrophe handelt. Wenn Sie jedoch den in diesem Artikel eingeführten "Indikator" verwenden, können Sie dies leicht überprüfen. Ich werde.

Es gibt kein besonderes Problem, wenn das zu analysierende Ziel nur interne Daten sind und alle Daten vollständig mit dem Schlüssel verknüpft sind. Dies ist jedoch hilfreich, wenn unbekannte Daten von außen abgerufen und mit den firmeneigenen Daten verknüpft werden. Machen.

Nehmen wir ein konkretes Beispiel.

Konkretes Beispiel

Angenommen, Sie möchten die von außen aufgenommenen Gewichtsdaten b an die vorhandenen Höhendaten a anhängen.

a = pd.DataFrame({
    "ID" : [1, 2, 3, 4, 6],
    "name": ["Tom", "Bob", "Alex", "Mike", "John"],
    "heigt": [169, 173, 163, 170, 182]
})

b = pd.DataFrame({
    "ID" : [1, 2, 3, 4, 5],
    "weight": [65, 70, 72, 58, 61]
})
a
スクリーンショット 2019-12-22 11.58.39.png
b
スクリーンショット 2019-12-22 11.58.45.png

Wenn Sie ohne nachzudenken analysieren möchten

c = a.merge(b, on="ID", how="left")
# or
c = a.merge(b, on="ID", how="inner")

Ich denke, Sie sollten es gemäß Ihrem Zweck tun.

Da b die von außen eingebrachten Daten sind, möchten wir hier Folgendes wissen.

――Wie viel sind a und b miteinander verbunden?

Die Option "Indikator" macht es leicht, dies zu sehen. Es ist einfach zu bedienen, fügen Sie einfach "indic = True" hinzu, wie unten gezeigt.

(Eine doppelte Überprüfung des Join-Schlüssels wird hier nicht erwähnt.)

c = a.merge(b, on="ID", how="outer", indicator=True)
c
スクリーンショット 2019-12-22 12.14.25.png

Dann wird die Spalte "_merge" zusammen mit dem zusammengeführten Datensatz wie oben hinzugefügt. Die Spalte _merge enthält einen der Werte both, left_only oder right_only, der angibt, woher der Datensatz stammt. Verwenden Sie danach diese Spalte

c_left_only = c[c["_merge"]=="left_only"]
c_left_only
スクリーンショット 2019-12-22 12.21.01.png Dann können Sie eine Liste von Personen erhalten, die groß, aber nicht schwer sind.

Es ist zweckmäßig, beim Zusammenführen wie = "äußere" festzulegen und die Daten später entsprechend dem Zweck mit dem Wert "_merge" zu extrahieren.

Außerdem unterstützt indic nicht nur den Typ bool, sondern auch str.

d = a.merge(b, on="ID", how="outer", indicator="flg_weight")
d
スクリーンショット 2019-12-22 12.22.58.png Der `_merge` Teil kann die angegebene Zeichenfolge sein.

Es ist eine praktische Funktion, also benutzen Sie sie bitte! Lassen Sie uns ein gutes Leben in der Datenanalyse haben ~~

Recommended Posts

Verwenden Sie den Indikator mit pd.merge
Verwenden Sie RTX 3090 mit PyTorch
Verwenden Sie ansible mit cygwin
Verwenden Sie pipdeptree mit virtualenv
[Python] Verwenden Sie JSON mit Python
Verwenden Sie Mock mit Pytest
Verwenden Sie Gentelella mit Django
Verwenden Sie Mecab mit Python 3
Verwenden Sie Tensorboard mit Chainer
Verwenden Sie DynamoDB mit Python
Verwenden Sie pip mit MSYS2
Verwenden Sie Python 3.8 mit Anaconda
Verwenden Sie Copyright mit Spacemacs
Verwenden Sie Python mit Docker
Verwenden Sie TypeScript mit Django-Kompressor
Verwenden Sie WENIGER mit Django
Verwenden Sie MySQL mit Django
Verwenden Sie Enum mit SQLAlchemy
Verwenden Sie Tensorboard mit NNabla
Verwenden Sie GPS mit Edison
Verwenden Sie nim mit Jupyter
Verwenden Sie die Trello-API mit Python
Verwenden Sie gemeinsam genutzten Speicher mit gemeinsam genutzten Bibliotheken
Verwenden Sie Richtungsdiagramme mit networkx
Verwenden Sie TensorFlow mit Intellij IDEA
Verwenden Sie die Twitter-API mit Python
Verwenden Sie pip mit Jupyter Notebook
Verwenden Sie DATE_FORMAT mit dem SQLAlchemy-Filter
Verwenden Sie TUN / TAP mit Python
Verwenden Sie sqlite3 mit NAO (Pepper)
Verwenden Sie die load_extensions von sqlite mit Pyramid
Verwenden Sie Windows 10-Schriftarten mit WSL
Verwendung von Chainer mit Jetson TK1
Verwenden Sie SSL mit Sellerie + Redis
Verwenden Sie Cython mit Jupyter Notebook
Verwenden Sie Maxout + CNN mit Pylearn2
Verwenden Sie WDC-433SU2M2 mit Manjaro Linux
Verwenden Sie OpenBLAS mit numpy, scipy
Verwenden Sie die Unterschall-API mit Python3
Verwenden von Sonicwall NetExtener mit Systemd
Verwenden Sie prefetch_related bequem mit Django
Verwenden Sie einen AWS-Interpreter mit Pycharm
Verwenden von Bokeh mit IPython Notebook
Verwenden Sie Python-ähnliche Bereiche mit Rust
Verwenden Sie MLflow mit Databricks ④ - Anrufmodell -
Python: So verwenden Sie Async mit
Verwenden Sie eine Point Grey-Kamera mit Python (PyCapture2).
Verwenden Sie vl53l0x mit RaspberryPi (Python)
Verwenden Sie PX-S1UD / PX-Q1UD mit Jetson Nano
Verwenden Sie die Vorschaufunktion mit aws-cli
So verwenden Sie virtualenv mit PowerShell
Verwenden Sie NAIF SPICE TOOL KIT mit Python
Verwenden Sie rospy mit virtualenv in Python3
Markdown mit Jupyter-Notebook verwenden (mit Verknüpfung)
Verwenden Sie Python in pyenv mit NeoVim
Verwenden Sie Tensorflow 2.1.0 mit Anaconda unter Windows 10!
Verwenden Sie die Windows 10-Sprachsynthese mit Python
Verwenden Sie die Curl / JQ-Bibliothek mit Go