2012-10-25 22 views
8

Jeśli mam ramkę danych, która ma kolumny, które zawierają tę samą nazwę, czy istnieje sposób na połączenie kolumn o tej samej nazwie z jakąś funkcją (tj. Sumą)?Scal kolumny w ramach DataFrame o tej samej nazwie

Na przykład z:

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 

Jak mogę zwinąć kolumny NY-WEB01 (istnieje kilka podwójnych kolumn, a nie tylko NY-WEB01) poprzez zsumowanie każdy wiersz, gdzie nazwa kolumny jest taka sama ?

+0

Tak, to jest [Split-Zastosuj-Combine] (h ttp: //pandas.pydata.org/pandas-docs/stable/groupby.html) gdzie twoja funkcja agregująca to 'sum()'. Jest to bardzo powszechny paradygmat. Przy okazji "agregujesz" wiersze, a nie "scalasz je". – smci

+1

Również tutaj faktycznie łączysz rzędy, a nie kolumny. (Łączysz Rzędy na podstawie pewnych Kolumn o tej samej wartości (nie "nazwa")). Możesz poprawić swój tytuł. – smci

Odpowiedz

12

Wierzę, że to nie to, czego po:

df.groupby(lambda x:x, axis=1).sum() 

Alternatywnie, od 3% do 15% szybciej zależnie od długości DF:

df.groupby(df.columns, axis=1).sum() 

EDIT: Aby przedłużyć ten Beyond sumy, użyj .agg() (skrót .aggregate()):

df.groupby(df.columns, axis=1).agg(numpy.max) 
+0

Dziękujemy! Szukałem czegoś takiego przez jakiś czas. –

Powiązane problemy