Pandas 请从索引列中选择范围

Pandas 请从索引列中选择范围,pandas,Pandas,我需要做一个函数来选择索引范围(第一列) 我如何才能做到这一点?要设置数据: In [30]: df = pd.DataFrame({1880:[ 'Aachen', 1, 'Valid', 'L5', 21.0, 'Fell', 50.77500, 6.08333, (50.775000, 6.0

我需要做一个函数来选择索引范围(第一列)

我如何才能做到这一点?

要设置数据:

In [30]: df = pd.DataFrame({1880:[ 'Aachen',   1,   'Valid',   'L5',          
                                   21.0,     'Fell',    50.77500,    
                                   6.08333,    (50.775000, 6.083330)],
                            1951:[ 'Aarhus',   2,   'Valid',   'H6',          
                                   720.0,    'Fell',    56.18333,   
                                   10.23333,   (56.183330, 10.233330)],
                            1952:[ 'Abee',     6,   'Valid',   'EH4',         
                                   107000.0, 'Fell',    54.21667, 
                                   -113.00000, (54.216670, -113.000000)],
                            1976:[ 'Acapulco', 10,  'Valid',   'Acapulcoite', 
                                   1914.0,   'Fell',    16.88333,  
                                   -99.90000,  (16.883330, -99.900000)],
                            1902:[ 'Achiras',  370, 'Valid',   'L6',          
                                   780.0,    'Fell',   -33.16667,  
                                   -64.95000, (-33.166670, -64.950000)]}).T                 

In [31]: df
Out[31]: 
             0    1      2            3       4     5        6        7  \
1880    Aachen    1  Valid           L5      21  Fell   50.775  6.08333   
1902   Achiras  370  Valid           L6     780  Fell -33.1667   -64.95   
1951    Aarhus    2  Valid           H6     720  Fell  56.1833  10.2333   
1952      Abee    6  Valid          EH4  107000  Fell  54.2167     -113   
1976  Acapulco   10  Valid  Acapulcoite    1914  Fell  16.8833    -99.9   

                         8  
1880     (50.775, 6.08333)  
1902   (-33.16667, -64.95)  
1951  (56.18333, 10.23333)  
1952    (54.21667, -113.0)  
1976     (16.88333, -99.9)  
有几种方法可以做到这一点:

使用按编号索引:

In [32]: def get_range(df, start, finish):
             return df[start:finish]

In [33]: print(get_range(df, 2, 4))
           0  1      2    3       4     5        6        7  \
1951  Aarhus  2  Valid   H6     720  Fell  56.1833  10.2333   
1952    Abee  6  Valid  EH4  107000  Fell  54.2167     -113   

                         8  
1951  (56.18333, 10.23333)  
1952    (54.21667, -113.0)
或者,如果您的数据已排序,并且正在两个已知点之间查找一组行(使用“开始”和“结束”切片约定),则可以:


上面的代码还有很大的改进空间…

到目前为止您尝试了什么?
In [32]: def get_range(df, start, finish):
             return df[start:finish]

In [33]: print(get_range(df, 2, 4))
           0  1      2    3       4     5        6        7  \
1951  Aarhus  2  Valid   H6     720  Fell  56.1833  10.2333   
1952    Abee  6  Valid  EH4  107000  Fell  54.2167     -113   

                         8  
1951  (56.18333, 10.23333)  
1952    (54.21667, -113.0)
In [34]: def get_range(df, start, finish):
             on=False
             df_list=[]
             for i, row in df.iterrows():
                 if i == start:
                     on=True
                     df_list.append(i)
                 elif on:
                     if i == finish:
                         on=False
                     else:
                         df_list.append(i)
             return df.loc[df_list] 

In [35]: print(get_range(df, 1902, 1952))
            0    1      2   3    4     5        6        7  \
1902  Achiras  370  Valid  L6  780  Fell -33.1667   -64.95   
1951   Aarhus    2  Valid  H6  720  Fell  56.1833  10.2333   

                         8  
1902   (-33.16667, -64.95)  
1951  (56.18333, 10.23333)