Seite 1 von 1

Zeilen eines gruppierten DataFrames zählen und als separate Spalte hinzufügen

Verfasst: Freitag 17. März 2023, 14:06
von NinoBaumann
Hallo,

ich hoffe das hier wird kein Zwillingsbeitrag eines Bestehenden. Aber zumindest habe ich keinen passenden Beitrag mit meinen Stichworten gefunden.
Wie der Name schon sagt, möchte ich eine Dataframe nach mehreren Spalten gruppieren, dann eine Berechnung über die übrigen Spalten durchführen und die Anzahl der gruppierten Zeilen zählen. Bis auf das Zählen klappt auch alles:

Code: Alles auswählen

dfData=dfData.groupby(['DatumSchicht','Schicht','MATERIALNUMMER'], sort=False)[['FTB_WULST_NIO',
                                                                                'FTB_HOEHE_NIO',
                                                                                'KLEBERAUPE_NIO',
                                                                                'WIEGEERGEBNIS_NIO',
                                                                                'PRESSERGEBNIS_P1_NIO',
                                                                                'PRESSERGEBNIS_P2_NIO',
                                                                                'PRESSERGEBNIS_P3_NIO',
                                                                                'PRESSERGEBNIS_P4_NIO',
                                                                                'KRAFTPRUEFUNG_FTB_NIO',
                                                                                'OPTISCHE_PRFG_VBG_NIO',
                                                                                'OPTPRFGVBG_ZAHNZAHL_NIO',
                                                                                'OPTPRFGVBG_KAEFIGTYP_NIO',
                                                                                'OPTPRFGVBG_DREHRILL_NIO',
                                                                                'OPTPRFGVBG_KUGELZAHL_NIO',
                                                                                'OPTPRFGVBG_DECKEL_NIO',
                                                                                'KANTENKONTROLLE_VBG_NIO',
                                                                                'OPTISCHE_PRFG_FTB_NIO',
                                                                                ]].agg(lambda x: max(x) - min(x))
Nach den Spalten 'DatumSchicht','Schicht','MATERIALNUMMER' wurde gruppiert. Jetzt möchte ich die Anzahl der darin enthaltenen Zeilen zählen und als Extraspalte mit dem Namen 'Anzahl' dem DataFrame hinzufügen. Ich habe gesehen, dass man .size() bis .count() nutzen kann. Obwohl size() wohl sicherer ist, falls man mal nan Werte hat. Aber ich bekomme das irgendwie nicht in den Code oben eingebaut. Ich bekomme immer einen TypeError: 'numpy.int32' object is not callable. Der hat ja sonst etwas mit [] und () zutun. Aber ich komme gerade nicht weiter. Kann mir jemand helfen?

Re: Zeilen eines gruppierten DataFrames zählen und als separate Spalte hinzufügen

Verfasst: Freitag 17. März 2023, 15:32
von Sirius3
Was hast Du denn versucht? Den Code mit size() sehe ich nicht?

Re: Zeilen eines gruppierten DataFrames zählen und als separate Spalte hinzufügen

Verfasst: Freitag 17. März 2023, 15:52
von NinoBaumann
Sirius3 hat geschrieben: Freitag 17. März 2023, 15:32 Was hast Du denn versucht? Den Code mit size() sehe ich nicht?
Ich habe den Codeteil gelöscht, da er nicht funktioniert hat.

Re: Zeilen eines gruppierten DataFrames zählen und als separate Spalte hinzufügen

Verfasst: Montag 20. März 2023, 08:41
von NinoBaumann
Sirius3 hat geschrieben: Freitag 17. März 2023, 15:32 Was hast Du denn versucht? Den Code mit size() sehe ich nicht?
Hallo Sirius,

ich habe es jetzt auf folgendem Weg gelöst:

Code: Alles auswählen

dfData1=dfData.groupby(['DatumSchicht','Schicht','MATERIALNUMMER'], sort=False).size().reset_index(name='Anzahl')

dfData=dfData.groupby(['DatumSchicht','Schicht','MATERIALNUMMER'], sort=False)[['FTB_WULST_NIO',            # Gruppierung nach Datum, Schicht, Teilenummer
                                                                                'FTB_HOEHE_NIO',
                                                                                'KLEBERAUPE_NIO',
                                                                                'WIEGEERGEBNIS_NIO',
                                                                                'PRESSERGEBNIS_P1_NIO',
                                                                                'PRESSERGEBNIS_P2_NIO',
                                                                                'PRESSERGEBNIS_P3_NIO',
                                                                                'PRESSERGEBNIS_P4_NIO',
                                                                                'KRAFTPRUEFUNG_FTB_NIO',
                                                                                'OPTISCHE_PRFG_VBG_NIO',
                                                                                'OPTPRFGVBG_ZAHNZAHL_NIO',
                                                                                'OPTPRFGVBG_KAEFIGTYP_NIO',
                                                                                'OPTPRFGVBG_DREHRILL_NIO',
                                                                                'OPTPRFGVBG_KUGELZAHL_NIO',
                                                                                'OPTPRFGVBG_DECKEL_NIO',
                                                                                'KANTENKONTROLLE_VBG_NIO',
                                                                                'OPTISCHE_PRFG_FTB_NIO',
                                                                                ]].agg(lambda x: max(x) - min(x))

dfData[['Anzahl']] = dfData1[['Anzahl']].values
Schöner wäre es natürlich in der gleichen Zeile wie der groupby Befehl steht. Aber wie gesagt, wenn ich versuche den Codeteil

Code: Alles auswählen

.size().reset_index(name='Anzahl')
in die Zeile zu schreiben kommt der Error.

Beste Grüße
Nino

Re: Zeilen eines gruppierten DataFrames zählen und als separate Spalte hinzufügen

Verfasst: Montag 20. März 2023, 09:03
von Sirius3
Schöner wäre es, wenn Du den groupby-Befehl in einer eigenen Zeile hättest:

Code: Alles auswählen

IMPORTANT_COLUMNS = [
    'FTB_WULST_NIO',
    'FTB_HOEHE_NIO',
    'KLEBERAUPE_NIO',
    'WIEGEERGEBNIS_NIO',
    'PRESSERGEBNIS_P1_NIO',
    'PRESSERGEBNIS_P2_NIO',
    'PRESSERGEBNIS_P3_NIO',
    'PRESSERGEBNIS_P4_NIO',
    'KRAFTPRUEFUNG_FTB_NIO',
    'OPTISCHE_PRFG_VBG_NIO',
    'OPTPRFGVBG_ZAHNZAHL_NIO',
    'OPTPRFGVBG_KAEFIGTYP_NIO',
    'OPTPRFGVBG_DREHRILL_NIO',
    'OPTPRFGVBG_KUGELZAHL_NIO',
    'OPTPRFGVBG_DECKEL_NIO',
    'KANTENKONTROLLE_VBG_NIO',
    'OPTISCHE_PRFG_FTB_NIO',
]
groups = data.groupby(['DatumSchicht','Schicht','MATERIALNUMMER'], sort=False)
grouped_data = groups[IMPORTANT_COLUMNS].agg(np.ptp)
grouped_data['Anzahl'] = groups.size()

Re: Zeilen eines gruppierten DataFrames zählen und als separate Spalte hinzufügen

Verfasst: Montag 20. März 2023, 12:55
von NinoBaumann
Sirius3 hat geschrieben: Montag 20. März 2023, 09:03 Schöner wäre es, wenn Du den groupby-Befehl in einer eigenen Zeile hättest:

Code: Alles auswählen

IMPORTANT_COLUMNS = [
    'FTB_WULST_NIO',
    'FTB_HOEHE_NIO',
    'KLEBERAUPE_NIO',
    'WIEGEERGEBNIS_NIO',
    'PRESSERGEBNIS_P1_NIO',
    'PRESSERGEBNIS_P2_NIO',
    'PRESSERGEBNIS_P3_NIO',
    'PRESSERGEBNIS_P4_NIO',
    'KRAFTPRUEFUNG_FTB_NIO',
    'OPTISCHE_PRFG_VBG_NIO',
    'OPTPRFGVBG_ZAHNZAHL_NIO',
    'OPTPRFGVBG_KAEFIGTYP_NIO',
    'OPTPRFGVBG_DREHRILL_NIO',
    'OPTPRFGVBG_KUGELZAHL_NIO',
    'OPTPRFGVBG_DECKEL_NIO',
    'KANTENKONTROLLE_VBG_NIO',
    'OPTISCHE_PRFG_FTB_NIO',
]
groups = data.groupby(['DatumSchicht','Schicht','MATERIALNUMMER'], sort=False)
grouped_data = groups[IMPORTANT_COLUMNS].agg(np.ptp)
grouped_data['Anzahl'] = groups.size()
ja, das ist auch eine schöne Variante. Danke :D