使用非连续列表索引选择索引到Pandas多索引DF

时间:2015-02-13 18:19:48

标签: python indexing pandas dataframe

我正在将我的数据组织成一个多索引df,看起来像这样:

In [8]: data
Out[8]:
                    Time     Primary  Secondary    BL LED
Sweep
Sweep0001 0      0.00000  -70.434570 -41.656494 -0.000305
          1      0.00005  -67.626953 -41.625977  0.000305
          2      0.00010  -68.725586 -41.595459 -0.002441
          3      0.00015  -70.556641 -41.625977  0.000305
          4      0.00020  -71.899414 -41.442871 -0.002136
...                  ...         ...        ...       ...
Sweep0010 79970  3.99850 -105.102539 -41.351318 -0.001221
          79971  3.99855  -96.801758 -41.534424  0.000000
          79972  3.99860 -105.712891 -41.687012  0.000305
          79973  3.99865 -109.741211 -41.473389 -0.001221
          79974  3.99870 -106.567383 -41.503906 -0.000610

[800000 rows x 4 columns]

我需要能够选择任意扫描组合(例如Sweep0002,Sweep0005,Sweep0007)。理想情况下,我可以传递一个我想要选择的扫描列表。

我可以使用.ix选择一系列扫描,只要它们是连续的。 e.g:

In [9]: data.ix['Sweep0001':'Sweep0003']
Out[9]:
                    Time    Primary  Secondary    BL LED
Sweep
Sweep0001 0      0.00000 -70.434570 -41.656494 -0.000305
          1      0.00005 -67.626953 -41.625977  0.000305
          2      0.00010 -68.725586 -41.595459 -0.002441
          3      0.00015 -70.556641 -41.625977  0.000305
          4      0.00020 -71.899414 -41.442871 -0.002136
...                  ...        ...        ...       ...
Sweep0003 79970  3.99850 -93.139648 -41.595459 -0.000610
          79971  3.99855 -88.378906 -41.381836 -0.002747
          79972  3.99860 -93.750000 -41.534424  0.000610
          79973  3.99865 -93.261719 -41.381836  0.000000
          79974  3.99870 -93.139648 -41.473389  0.000610

[240000 rows x 4 columns]

但是,我无法找到一种方法来选择非连续范围/扫描列表。

我已经使用循环扫描列表并构建所选扫描的新df,这显然不是理想的解决方案。即:

sweep_list = ['Sweep0001', 'Sweep0003', 'Sweep0009']
df_list = [data.ix[sweep] for sweep in sweep_list]

sub_df = pd.concat(df_list, keys=sweep_list)
sub_df.index.levels[0].name = "Sweep"

必须有更好的方法来做这件事,但我似乎无法弄清楚那是什么。

由于

0 个答案:

没有答案