【问题标题】:Reverse DataFrame column order反转 DataFrame 列顺序
【发布时间】:2015-03-05 05:52:50
【问题描述】:

我想简单地反转给定 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]

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

【问题讨论】:

    标签: python pandas dataframe reverse


    【解决方案1】:

    注意:从 Pandas v0.20 开始,.ix indexer 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
    

    时间

    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
    

    在这种情况下,花式索引会稍微快一些

    【讨论】:

      【解决方案2】:

      接近您已经尝试过的解决方案是使用:

      >>> 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 索引器的工作方式相同。

      【讨论】:

      • 更详细地说:football[reversed(football.columns)]
      【解决方案3】:

      注意:从 Pandas v0.20 开始,.ix indexer is deprecated 支持 .iloc / .loc

      接近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
      

      编辑:使用.loc 而不是.ix 带来了进一步(最小)的改进,如football.loc[:,::-1]

      【讨论】:

        猜你喜欢
        • 2018-12-31
        • 1970-01-01
        • 2019-06-15
        • 1970-01-01
        • 2018-02-24
        • 1970-01-01
        • 2012-09-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多