[PYTHON] [Pandas_flavor] Fügen Sie eine Methode von Pandas DataFrame hinzu

TL;DR

BEFORE


dataframe_ = dataframe.loc[(dataframe.time == 'pre') & \
                           (dataframe.group == 'exp') & \
                           (dataframe.cond == 'a'), :]
sns.regplot(x='mood', y='score', data=dataframe_)

↓↓↓

AFTER


dataframe.by(time='pre', cond='exp', group='a').regplot(x='trait', y='score')

Sie können dem Pandas DataFrame (und der Serie) mithilfe von pandas_flavor Ihre bevorzugten Methoden hinzufügen.

Motivation

** Es ist mühsam, die Teile, die die Bedingungen erfüllen, aus den Langformatdaten zu extrahieren! ** ** **

Angenommen, Sie haben diese Daten.

スクリーンショット 2020-11-20 10.46.29.png

Die Einstellung war, dass 50 Probanden in zwei Gruppen eingeteilt wurden (Gruppe: exp, ctrl) und in jeder Gruppe einige Interventionen durchgeführt wurden. Die Aufgabe wurde vor und nach dem Eingriff durchgeführt (Zeit: vor, nach), und die Punktzahl wurde unter den beiden Bedingungen (Bedingung: a, b) während der Aufgabe gemessen. Gleichzeitig wurde die Stimmung bei der Ausführung der Aufgabe für jede Bedingung gemessen (Bedingung: a, b). [^ 1]

Wenn die Messdaten wie im obigen Bild im Langformat zusammengefasst sind, ist die nachfolgende Analyse einfacher.

Nun, bevor Sie vorerst verschiedene Analysen durchführen ** Zeichnen wir die Korrelation zwischen Punktzahl und Stimmung, wenn die Aufgabenbedingung a der Exp-Gruppe in pre ** ist.

Zeilen, die die oben genannten Bedingungen erfüllen, werden extrahiert, sodass der Code folgendermaßen aussieht.

dataframe_ = dataframe.loc[(dataframe.time == 'pre') & \
                           (dataframe.group == 'exp') & \
                           (dataframe.cond == 'a'), :]
sns.regplot(x='mood', y='score', data=dataframe_)

Ich mache eine Bool-Typ-Serie, die die Bedingungen ausdrückt, und setze sie in ".loc". Nun, es ist irgendwie schmutzig.

Wenn Sie die Methode ".query ()" verwenden, können Sie wie folgt schreiben.

dataframe_ = dataframe.query('time == "pre" & group == "exp" & cond == "a"')
sns.regplot(x='mood', y='score', data=dataframe_)

Dieser ist viel sauberer, aber ich frage mich, ob er sich etwas besser anfühlt. Es scheint, dass die Methode zur Verwendung von .query () langsamer ist als die Methode zur Verwendung von bool's Series. Schließlich ist es mühsam, die Teile, die die Bedingungen erfüllen, aus den ** Langformatdaten zu extrahieren! ** ** **

Fügen Sie eine Methode für Pandas DataFrame hinzu

** Dann sollten Sie eine Methode erstellen **

Erstellen wir daher eine ** neue Methode **, die Zeilen aus dem DataFrame extrahiert, die die Bedingungen erfüllen. ↓ Fügen Sie DataFrame eine neue .by () Methode hinzu, die auf diese Weise verwendet werden kann.

dataframe.by(time='pre', cond='exp', group='a')

Sie können dies leicht mit einem Paket namens pandas_flavor erreichen.

Wie installiert man

pip oder

pip install pandas_flavor

Es ist ein Schuss mit Conda.

conda install -c conda-forge pandas_flavor

Anwendungsbeispiel

import pandas_flavor as pf


@pf.register_dataframe_method
def by(self, **args):
    for key in args.keys():
        self = self.loc[self.loc[:, key] == args[key], :]
    return self

Schreiben Sie einfach eine Funktion und fügen Sie "@ pf.register_dataframe_method" als Dekorateur hinzu. In diesem Beispiel wird das Argument als Wörterbuch empfangen, indem "** args" ausgeführt wird. Dies extrahiert die durch jedes Argument angegebene Zeile.

Darüber hinaus wäre es schön, verschiedene Seaborn-Funktionen in Methoden umzuwandeln.

@pf.register_dataframe_method
def regplot(self, **args):
    return sns.regplot(data=self, **args)

スクリーンショット 2020-11-20 13.01.55.png

Und so sieht es aus. Wenn Sie pandas.Series eine Methode hinzufügen möchten, können Sie dasselbe mit @ pf.register_series_method tun.

In diesem Beispiel ... Ich denke, es ist in Ordnung, ".query ()" zu verwenden, aber es scheint, dass es auf verschiedene Arten angewendet werden kann.

[^ 1]: Unnötig zu sagen, es ist alles ein falsches psychologisches Experiment. Numerische Werte werden vom Zufallsmodul generiert.

Recommended Posts

[Pandas_flavor] Fügen Sie eine Methode von Pandas DataFrame hinzu
[Python] Zusammenfassung der Methode zur Tabellenerstellung mit DataFrame (Pandas)
Verhalten der Pandas Rolling () Methode
Praktische Funktion zum Hinzufügen von Spalten an einer beliebigen Stelle in Pandas DataFrame
Erstellen Sie einen Pandas-Datenrahmen aus einer Zeichenfolge.
So ermitteln Sie die Speicheradresse des Pandas-Datenrahmenwerts
Eine kleine Überprüfung von Pandas 1.0 und Dask
[Python] Fügen Sie Pandas DataFrame insgesamt Zeilen hinzu
Erstellen Sie mit Pandas einen Datenrahmen aus Excel
Pandas: Ein sehr einfaches Beispiel für DataFrame.rolling ()
Laden Sie Pandas DataFrame als CSV-Datei herunter
[Python] Lesen der CSV-Datei (Methode read_csv des Pandas-Moduls)
Clustering-Methode Clustering
Ein Memorandum of Method, das häufig bei der Analyse von Daten mit Pandas verwendet wird (für Anfänger)
Grundlegende Bedienung von Python Pandas Series und Dataframe (1)
Dies ist ein Beispiel für eine Funktionsanwendung im Datenrahmen.
Fügen Sie nach und nach eine Liste der Funktionen der Numpy-Bibliothek hinzu --a
Notieren Sie sich die Liste der grundlegenden Verwendungszwecke von Pandas
Zusammenfassung der Vorverarbeitungsmethoden für Python-Anfänger (Pandas-Datenrahmen)
Parallelisierung der Klassenmethode
Grundlegende Bedienung von Pandas
Erstellt eine Methode zur automatischen Auswahl und Visualisierung eines geeigneten Diagramms für Pandas DataFrame
Python-Anwendung: Pandas # 3: Dataframe
Zusammenfassung der Testmethode
Fügen Sie nach und nach eine Liste der Funktionen der Numpy-Bibliothek hinzu --- b
Eine einfache Python-Implementierung der k-Neighborhood-Methode (k-NN)
Fügen Sie nach und nach eine Liste der Funktionen der Numpy-Bibliothek hinzu --c
Kombinieren Sie Listen zu einem DataFrame mit Pandas
Eine Sammlung von Methoden, die beim Aggregieren von Daten mit Pandas verwendet werden