[PYTHON] Ich möchte einem Pandas-Datenrahmen eine group_id geben

Einführung

Wenn Sie Duplikate mit Pandas löschen oder aggregieren möchten, können Sie drop_duplicates oder groupby verwenden.

So entfernen Sie doppelte Elemente in Pandas DataFrame oder Series Python Verwendung von Pandas groupby

Es gibt jedoch Zeiten, in denen ich jeder Gruppe eine group_id unter den gleichen Bedingungen wie bei groupby geben möchte, aber ich wusste nicht, wie es geht, also habe ich es implementiert. (Es ist möglicherweise nicht die beste Vorgehensweise, aber es war einfach zu implementieren.)

Group_id gewähren

#Pandas importieren
import pandas as pd

#Datenrahmen vorbereiten
df = pd.DataFrame({
    'building_name': ['Gebäude A.', 'Gebäude A.', 'B Gebäude', 'C Gebäude', 'B Gebäude', 'B Gebäude', 'D Gebäude'],
    'property_scale': ['large', 'large', 'small', 'small', 'small', 'small', 'large'],
    'city_code': [1, 1, 1, 2, 1, 1, 1]
})
df
building_name property_scale city_code
Gebäude A. large 1
Gebäude A. large 1
B Gebäude small 1
C Gebäude small 2
B Gebäude small 1
B Gebäude small 1
D Gebäude large 1
#Gruppenobjektivierung
group_info = df.groupby(['property_scale', 'city_code'])
#Werfen wir einen Blick auf den Inhalt
group_info.groups

{('large', 1): Int64Index([0, 1, 6], dtype='int64'), ('small', 1): Int64Index([2, 4, 5], dtype='int64'), ('small', 2): Int64Index([3], dtype='int64')}

#Siehe auch
group_info.get_group(('large', 1))
building_name property_scale city_code
Gebäude A. large 1
Gebäude A. large 1
D Gebäude large 1
# group_ID gewähren
df = pd.concat([
    group_info.get_group(group_name).assign(group_id=group_id)
    for group_id, group_name
    in enumerate(group_info.groups.keys())])
df
building_name property_scale city_code group_id
Gebäude A. large 1 0
Gebäude A. large 1 0
D Gebäude large 1 0
B Gebäude small 1 1
B Gebäude small 1 1
B Gebäude small 1 1
C Gebäude small 2 2

Ich werde es auch zu einer Funktion machen

import pandas as pd
from pandas.core.frame import DataFrame

def add_group_id(df: DataFrame, by: list) -> DataFrame:
    """Gruppieren Sie für Datensätze mit doppelten Werten_Gib einen Ausweis.

    Args:
        df (DataFrame):Beliebiger Datenrahmen
        by (list):Spaltenname für die Gruppe

    Returns:
        DataFrame

    """
    #Bereits Gruppe_Wenn die ID-Spalte enthalten ist, gruppieren Sie nach_ID hinzufügen
    if 'group_id' in df.columns:
        by += ['group_id']
    group_info = df.groupby(by=by)
    new_df = pd.concat([
        group_info.get_group(group_name).assign(group_id=group_id)
        for group_id, group_name
        in enumerate(group_info.groups.keys())])
    return new_df

Nachtrag

Dank @r_beginners für das Kommentieren scheint groupby in erster Linie eine group_id-Berechnungsfunktion zu haben.

import pandas as pd
from pandas.core.frame import DataFrame

def add_group_id(df: DataFrame, by: list) -> DataFrame:
    """Gruppieren Sie für Datensätze mit doppelten Werten_Gib einen Ausweis.

    Args:
        df (DataFrame):Beliebiger Datenrahmen
        by (list):Spaltenname für die Gruppe

    Returns:
        DataFrame

    """
    #Bereits Gruppe_Wenn die ID-Spalte enthalten ist, gruppieren Sie nach_ID hinzufügen
    if 'group_id' in df.columns:
        by += ['group_id']
    new_df = df.assign(group_id =df.groupby(by).ngroup())
    return new_df

Wie @ nkay kommentierte, scheint pd.factorize () ebenfalls zu funktionieren.

Pandas-Methode Lassen Sie uns mehr lernen. ..

Recommended Posts

Ich möchte einem Pandas-Datenrahmen eine group_id geben
Ich möchte ○○ mit Pandas machen
Ich habe versucht, einen Pandas-Datenrahmen zu erstellen, indem ich mit Python Informationen zum Lebensmittelrückruf abgekratzt habe
Ich möchte in der Einschlussnotation drucken
Ich möchte eine Python-Umgebung erstellen
Ich möchte Matplotlib zu einem dunklen Thema machen
Ich möchte einfach ein Rauschmodell erstellen
Ich möchte einen DataFrame in MSSQL einfügen
Ich möchte mit Python ein Fenster erstellen
Wie auch immer, ich möchte JSON-Daten einfach überprüfen
Ich möchte 100 Datenwissenschaften mit Colaboratory schlagen
Ich möchte ein Spiel mit Python machen
Ich möchte keinen Codierungstest machen
Ich möchte die Daten von League of Legends ③ erhalten
Ich möchte die Daten von League of Legends ② erhalten
Ich möchte eine Art von Implementierung erstellen, die angeschlossen werden kann
Machen Sie Urlaubsdaten mit Pandas zu einem Datenrahmen
Ich möchte leicht einen leckeren Laden finden
Ich möchte League of Legends-Daten erhalten ①
Ich möchte mit Python in eine Datei schreiben
Ich möchte eine Django-App auf Heroku hochladen
Ich möchte eine WEB-Anwendung mit den Daten von League of Legends ① erstellen
Ändern Sie den Datenrahmen der Pandas-Kaufdaten (ID x Produkt) in ein Wörterbuch
Ich möchte eine Variable in einen Python-String einbetten
Ich möchte Timeout einfach in Python implementieren
100 Klopfen bei der Bildverarbeitung !! (021-030) Ich möchte eine Pause machen ...
Ich möchte schnell UUID generieren (Gedenknotiz) ~ Python Edition ~
Ich möchte mit einem Knopf am Kolben übergehen
Ich möchte mit verstärkendem Lernen einen Berg besteigen
Ich möchte in Python schreiben! (2) Schreiben wir einen Test
Ich möchte ein beliebtes Paket auf PyPi finden
Ich möchte eine Datei mit Python zufällig testen
Ich möchte einfach eine modellbasierte Entwicklungsumgebung erstellen
Ich möchte mit einem Roboter in Python arbeiten.
Ich möchte eine Zeichenkette mit Hiragana teilen
Ich möchte ein Paket von Php Redis installieren
[Python] Ich möchte aus einer verschachtelten Liste einen Taple machen
Ich möchte manuell eine Legende mit matplotlib erstellen
Ich möchte automatisch eine Unternehmensgründungs-E-Mail senden
Ich möchte sagen, dass es eine Datenvorverarbeitung gibt ~
Ich möchte einen Quantencomputer mit Python betreiben
Ich möchte eine lokale Variable mit Lambda binden
Ich möchte eine Python-Datenquelle in Re: Dash verwenden, um Abfrageergebnisse zu erhalten
Ich möchte einen Mox-Generator
Ich möchte SUDOKU lösen
Ich möchte einen Mox-Generator (2)
Ich möchte Daten mit Python analysieren können (Teil 3)
Ich möchte Daten mit Python analysieren können (Teil 1)
Ich möchte einen Blog-Editor mit dem Administrator von Django erstellen
Ich möchte eine Jupyter-Umgebung mit einem Befehl starten
[Python] Ich möchte einen gemeinsamen Satz zwischen numpy erhalten
Ich möchte viele Prozesse von Python aus starten
Ich möchte ein Klickmakro mit pyautogui (Wunsch) erstellen.
Ich möchte automatisch einen modernen Metal-Bandnamen generieren
Einfallsreichtum beim speichersparenden Umgang mit Daten mit Pandas
Ich möchte Daten mit Python analysieren können (Teil 4)
Ich möchte Daten mit Python analysieren können (Teil 2)
[Einführung in Pandas] Ich habe versucht, die Austauschdaten durch Dateninterpolation zu erhöhen ♬
Ich möchte ein Klickmakro mit pyautogui (Outlook) erstellen.
Ich möchte eine virtuelle Umgebung mit Jupyter Notebook verwenden!