我正在将我的数据组织成一个多索引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"
必须有更好的方法来做这件事,但我似乎无法弄清楚那是什么。
由于