2015-01-07 22 views
5

Belirli bir DataFrame'in sütun sırasını basitçe tersine çevirmek istiyorum.python pandas: ters df sütun sırası

Benim DataFrame:

data = {'year': [2010, 2011, 2012, 2011, 2012, 2010, 2011, 2012], 
    'team': ['Bears', 'Bears', 'Bears', 'Packers', 'Packers', 'Lions', 'Lions', 'Lions'], 
    'wins': [11, 8, 10, 15, 11, 6, 10, 4], 
    'losses': [5, 8, 6, 1, 5, 10, 6, 12]} 
football = pd.DataFrame(data, columns=['year', 'team', 'wins', 'losses']) 

Gerçek çıkışı:

year  team wins losses 
0 2010 Bears 11  5 
1 2011 Bears  8  8 
2 2012 Bears 10  6 
3 2011 Packers 15  1 
4 2012 Packers 11  5 
5 2010 Lions  6  10 
6 2011 Lions 10  6 
7 2012 Lions  4  12 

İşe yarayacağını ancak satır düzeni değil sütun sırasını tersine çevirir düşündüm: Ben de denedim

football[::-1] 

:

football.columns = football.columns[::-1] 

Ancak, sütun sütunlarının tamamını değil, sütun etiketlerini tersine çevirdi.

cevap

9

Daha önce denediğiniz şeye yakın bir çözüm kullanmak:

>>> football[football.columns[::-1]] 
    losses wins  team year 
0  5 11 Bears 2010 
1  8  8 Bears 2011 
2  6 10 Bears 2012 
3  1 15 Packers 2011 
4  5 11 Packers 2012 
5  10  6 Lions 2010 
6  6 10 Lions 2011 
7  12  4 Lions 2012 

football.columns[::-1] sütun DataFrame sekansının sırasını tersine döner ve football[...] bu yeni sekansı kullanılarak DataFrame reindexes.

bu işlem için daha kısa ve öz yolu iloc dizinleyici ile:

football.iloc[:, ::-1] 

ilk : "tüm satırları çekmek" anlamına gelir, ::-1 sütun geriye doğru aşama anlamına gelmektedir.

@ PietroBattiston'un yanıtında bahsedilen loc dizinleyicinin adı aynı şekilde çalışır.

1

Sen sırasını değiştirmek için, fantezi indeksleme .ix kullanmak sütunları geçmek ve ardından listeyi tersine çevirebilir:

In [27]: 

football.ix[::,football.columns[::-1]] 
Out[27]: 
    losses wins  team year 
0  5 11 Bears 2010 
1  8  8 Bears 2011 
2  6 10 Bears 2012 
3  1 15 Packers 2011 
4  5 11 Packers 2012 
5  10  6 Lions 2010 
6  6 10 Lions 2011 
7  12  4 Lions 2012 

zamanlamaları

In [32]: 

%timeit football[football.columns[::-1]] 
1000 loops, best of 3: 421 µs per loop 
In [33]: 

%timeit football.ix[::,football.columns[::-1]] 
1000 loops, best of 3: 403 µs per loop 

fantezi indeksleme bu durumda

yılında marjinal hızlıdır
4
EdChum's answer yakın

... ancak daha hızlı:

In [3]: %timeit football.ix[::,::-1] 
1000 loops, best of 3: 255 µs per loop 

In [4]: %timeit football.ix[::,football.columns[::-1]] 
1000 loops, best of 3: 491 µs per loop 

Ayrıca bir kolon gereksiz dikkat edin:

In [5]: all(football.ix[:,::-1] == football.ix[::,::-1]) 
Out[5]: True 

DÜZENLEME: Bir başka (minimal) iyileşme yerine .loc kullanılarak getirilirfootball.loc[:,::-1]'da olduğu gibi .ix'dan.

İlgili konular