Pandas: cannot perform both aggregation and transformation operations simultaneously

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Moin,

ich bräuchte einen ordentlichen Schubs bei einem Pandas-Problem. Da scheint sich das Verhalten über die Versionen verändert zu haben, deshalb ist es nicht ganz einfach das herauszulesen.
Der folgende Code funktioniert mit alten Versipnen von Pandas (0.4x), nicht jedoch mit einer aktuellen Version.
Es scheint damit zu tun zu haben, dass eine eigene Funktion beim Aggregieren verwendet wird. Ohne die funktioniert alles problemlos:

Code: Alles auswählen

import pandas as pd

DATA = {
    "id": [1, 1, 2, 2],
    "ham": [1, 2, 3, 4],
    "spam": [5, 6, 7, 8]
}

def aggregate_series(series):
    return series

def main():
    df = pd.DataFrame(data=DATA)
    df = (df
        .groupby([id,])
        .agg({"ham": "sum", "spam": "sum"})
        .assign(eggs=lambda x: x["spam"])
        .agg({"ham": "sum", "spam": "sum", "eggs": aggregate_series})
    )
    print(df)

if __name__ == "__main__":
    main()
"aggregate_series" wird gar nicht aufgerufen, das Programm steigt vorher aus:

ValueError: cannot perform both aggregation and transformation operations simultaneously
__deets__
User
Beiträge: 14542
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich finde da einen Bug: https://github.com/pandas-dev/pandas/issues/41768

Kannst du nicht auf eine vorherige Version pinnen?
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Hmm... ich habe gedacht, dass sich vielleicht etwas grundlegendes in der Bedienung geändert hat, denn betroffen scheinen alle Versionen seit 1.2 zu sein. Und das ist nicht mehr taufrisch.
Ich habe jetzt 1.1.5 gepinnt. Aktuell ist 1.3.4. Wenn die das tatsächlich über so viele Versionen mit sich geschleppt haben - ohjeh.

Danke dir!
Antworten