2015-01-07 45 views
5

与えられたDataFrameの列の順序を単純に逆にしたい。python pandas:逆方向df列の順序

マイ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']) 

実際の出力:

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 

私はこれが仕事だろうと思ったが、それは、行の順番列ではないため反転:私も試した

football[::-1] 

を:

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

しかし、それは列のラベルを逆転し、列全体を逆にしませんでした。

答えて

9

あなたがすでに試したことに近い解決策は、次のものを使用することです:

>>> 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]は、列のデータフレームのシーケンスの順序を逆にして、football[...]は、この新しいシーケンスを使用してデータフレームを再度インデックスを付け。同じことを達成するために

より簡潔な方法は、ilocインデクサーである:

football.iloc[:, ::-1] 

最初:は、「すべての行を取る」::-1手段が列を逆方向にステップを意味します。

@ PietroBattistonの答えに記載されたlocインデクサも同様に動作します。

1

あなたは、派手なインデックス.ixを使用する列を渡し、その後、順序を変更するには、リストを逆にすることができます:

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 

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 

タイミングはファンシーインデックスは、この場合にはわずかに速くなる

4
EdChum's answerに近い

...しかし速く:

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 

は、一のコロンが冗長である気づく:

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

EDIT:さらに(最小の)改善がなく.locを使用することによってもたらされる のように、.ixより大きい。

関連する問題