DataFrame列的顺序翻转

35

我想要简单地反转给定 DataFrame 中的列顺序。

我的 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]

但是这只是颠倒了列标签而不是整个列本身。

3个回答

64

一个与您已经尝试过的解决方案类似的方法是使用:

>>> 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] 可以将DataFrame列的顺序反转,然后 football[...] 使用这个新的顺序重新索引DataFrame。

使用iloc索引器可以更简洁地实现相同的功能:

football.iloc[:, ::-1]

第一个:表示“选取所有行”,而::-1表示通过列向后跨步。

@PietroBattiston回答中提到的loc索引器也是以同样的方式工作。


5
更冗长地表述: football[reversed(football.columns)]可以翻译为“将足球数据框中的列按相反的顺序呈现”。 - EliadL

5
注意:自Pandas v0.20起,.ix索引器已被弃用,推荐使用.iloc/.loc
接近于EdChum的答案...但更快:
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

编辑:使用football.loc[:,::-1]而不是football.ix[:,::-1]可以进一步(最小程度)改善。

1

注意:从Pandas v0.20开始,.ixindexer is deprecated已被.iloc/.loc取代。

您可以使用高级索引.ix,传递列名,然后反转列表以更改顺序:

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

timings

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

在这种情况下,花式索引略微更快。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接