Ich möchte Spalten in einem Pandas' DataFrame zu einem, unter bestimmten Bedingungen aggregieren. Die Idee besteht darin, Speicherplatz in einem DF zu sparen und einige der Spalten zu einem einzigen zusammenzufassen, sofern sie eine bestimmte Bedingung erfüllen. Ein Beispiel wäre es wahrscheinlich einfacher zu erklären:Pandas: Wie aggregiere ich * einige * der * Spalten * in einem Pandas 'DataFrame
import pandas as pd
import seaborn as sns # for sample data set
# load some sample data
titanic = sns.load_dataset('titanic')
# round the age to an integer for convenience
titanic['age_round'] = titanic['age'].round(0)
# crosstabulate
crtb = pd.crosstab(titanic['embark_town'], titanic['age_round'], margins=True)
crtb
ergibt:
Was ich tun möchte, ist zum Beispiel alle Spalten zu aggregieren, die> = 20 (zum Beispiel), zu einer Spalte mit dem Namen '20 + 'und die Werte wären die Summe aller Werte pro Zeile für die aggregierten Spalten. Wenn die Spaltenüberschriften < 20 sind, bleiben sie getrennt und unberührt. Eine Möglichkeit besteht darin, eine weitere Spalte im ursprünglichen DF zu erstellen, die den ursprünglichen Wert von age_rounded angibt, wenn es < 20 und '20 + 'ist, oder verwenden Sie .cut und pivotieren Sie darauf.
Fragen, ob es eine Möglichkeit gibt, es schlauer zu machen und ohne eine neue Spalte zu erstellen. Danke!
Danke für die Antwort. Ja, ich suche nach einer allgemeinen Lösung. Diese Lösung, die Sie vorschlagen, ähnelt meiner in dem Sinne, dass sie die tatsächlichen Spaltenwerte modifiziert. Ich hatte gehofft, dass es eine Lösung gibt, die auf die Spaltenüberschriften angewendet werden kann (die anschließend eine Aggregationsfunktion auf die tatsächlichen Werte anwenden). – Optimesh
Das würde nicht viel Sinn machen - Ihre Werte werden zu Ihren Spaltenüberschriften. Wenn Sie warten, bis sie die Header sind, haben Sie nur noch mehr zu tun. – flyingmeatball