Kombinieren duplizierten Spalten innerhalb einer DataFrame
Wenn ich einen dataframe, die Spalten mit den gleichen Namen, gibt es eine Möglichkeit, verbinden die Spalten, die den gleichen Namen mit einer Art von Funktion (d.h. die Summe)?
Beispielsweise mit:
In [186]:
df["NY-WEB01"].head()
Out[186]:
NY-WEB01 NY-WEB01
DateTime
2012-10-18 16:00:00 5.6 2.8
2012-10-18 17:00:00 18.6 12.0
2012-10-18 18:00:00 18.4 12.0
2012-10-18 19:00:00 18.2 12.0
2012-10-18 20:00:00 19.2 12.0
Wie könnte ich Zusammenbruch der NY-WEB01 Spalten (es gibt eine Reihe von doppelten Spalten, nicht nur für NY-WEB01) durch die Summe jeder Zeile, wo die Spalte name ist der gleiche?
- Ja, das ist Split-Anwenden-Kombinieren, wo Ihr die Aggregation-Funktion ist
sum()
. Dies ist eine sehr häufige Paradigma. Btw, du bist 'Aggregation' die Zeilen, nicht 'verschmelzen' Sie. - Auch hier bist du eigentlich das kombinieren der Zeilen, nicht Spalten. (Sie sind die Kombination von Zeilen basierend auf bestimmten Spalten mit dem gleichen Wert (nicht 'name')). Könnten Sie korrigieren möchten Ihre Titel.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube das tut, was Sie nach sind:
Alternativ zwischen 3% und 15% schneller, je nach Länge des df:
EDIT: so verlängern Sie diese über Summen, verwenden Sie
.agg()
(kurz für.aggregate()
):v0.20+ Antwort:
GroupBy
mitlevel
undaxis
argumentBrauchen Sie nicht eine lambda hier auch nicht explizit Abfragen
df.columns
;groupby
akzeptiert einelevel
argument können Sie angeben, in Verbindung mit deraxis
argument. Dieser Reiniger ist, IMO.Umgang
MultiIndex
SpaltenEinem anderen Fall zu beachten ist beim Umgang mit
MultiIndex
Spalten. BetrachtenDurchführen aggregation über die oberen Ebenen, verwenden Sie
oder, wenn die Aggregation pro oberen Ebene nur, verwenden
Alternative Interpretation: Fallen Doppelte Spalten
Wenn Sie hierher gekommen auf der Suche, um herauszufinden, wie einfach doppelte Spalten (ohne Ausführung jeglicher aggregation), verwenden Sie
Index.dupliziert
:Oder, um den letzten, geben Sie
keep='last'
(Standard ist'first'
),Den
groupby
alternativen für die beiden oben genannten Lösungen sinddf.groupby(level=0, axis=1).first()
ein, und... .last()
bzw.Hier möglich ist, einfachen Lösung für die gängigen Aggregatfunktionen wie
sum
,mean
,median
,max
,min
,std
- verwenden Sie nur Parameteraxis=1
für das arbeiten mit Spalten undlevel
:Ähnlich funktioniert index, dann verwenden Sie
axis=0
stattaxis=1
:Wenn nötig, verwenden Sie andere Funktionen wie
first
,last
,size
,count
notwendig ist, verwenden Sie coldspeed Antwort