dataframe gruppieren aber eine spalte erhalten

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
python_student
User
Beiträge: 23
Registriert: Samstag 22. Februar 2020, 13:02

Servus,
möchte wiedermal anhand einem Beispiel mein Problem erklären
Ich habe ein Dataframe das ungefähr so aussieht:

Name | Provider | rom | ram | CPU
aaaaa | THIN1 | 1000 | 2000 | 0
bbbbb | THIN2 | 3000 | 4000 | 0
ccccc | THIN3 | 5000 | 6000 | 0
bbbbb | NaN | 0 | 0 | 1

Das fertige Dataframe soll wie folgt aussehen:

Name | Provider | rom | ram | CPU
aaaaa | THIN1 | 1000 | 2000 | 0
bbbbb | THIN2 | 3000 | 4000 | 1
ccccc | THIN3 | 5000 | 6000 | 0

Wie man sieht Provider muss bestehen bleiben obwohl in Zeile 'bbbbb' ein NaN Wert drin stand.
Hab versucht das Problem so zu lösen:

df = df.groupby(["Name"], as_index=False).agg("sum")

Es wird alles richtig summiert aber meine spalte Provider verschwindet.
Wie bekomme ich es hin das die spalte erhalten bleibt.
Vielen Dank schon mal im voraus.
python_student
User
Beiträge: 23
Registriert: Samstag 22. Februar 2020, 13:02

Hab selber eine Lösung gefunden:

Code: Alles auswählen

    
    #replace nan values with 0
    df.fillna(0, inplace=True)

    #group Name / Provider Name and sum other columns
    df= df.groupby(["Name", "Provider"], as_index=False).agg("sum")
    
wahrscheinlich lag es an den nan werte.
python_student
User
Beiträge: 23
Registriert: Samstag 22. Februar 2020, 13:02

mein vorheriger Lösungsansatz ist falsch. Das Problem kann ich bis jetzt nicht lösen und hab auch keinen Lösungsansatz. Kann bitte wer helfen
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@python_student: Warum steht denn da NaN bei "Provider"? Das ist bei einer Spalte die keine Gleitkommazahlen beinhaltet komisch. Da müsste halt auch "THIN2" stehen, dann kann man "Name" und "Provider" als Schlüssel für die Aggregation nehmen und Dein gewünschtes Ergebnis heraus bekommen.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
python_student
User
Beiträge: 23
Registriert: Samstag 22. Februar 2020, 13:02

@__blackjack__ Das dort Werte fehlen ist korrekt, weil es aus einem anderen sheet kommt (dataframe) und dort gab es keine Spalte mit Provider. Deswegen fehlt auch der wert.
Gibt es keine Lösung das er den string übernimmt welcher größer als 0 ist? Ich komm leider nicht drauf.
Durch dieses Problem tauchen bei mir bugs auf weil ich es versuche nach teilstrings zu suchen und den Provider händisch verändere(hardcoding).
Vielen dank schon mal
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@python_student: Ich würde versuchen die Lücken zu füllen, beziehungsweise zusehen das die gar nicht erst entstehen. Oder diese Provider-Spalte erst hinterher hinzufügen.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Das Problem ist ja nicht nur die Provider-Spalte. Das Problem sind alle Spalten. NaN und 0 sollen offensichtlich durch Werte aus anderen Reihen ersetzt werden, wenn der Name gleich ist.
Mit Logik in Python zu lösen. Von Pandas habe ich keine Ahnung.
Antworten