我正在将我的数据文件夹组织成多索引数据框,其结构类似于:
In: df
Out:
Sweep Time Primary Secondary 720nm 473nm PMTShutter
Sweep1 0.00000 -87.429810 -4.882812 0.000610 0.000305 0.000000
0.00005 -87.445068 -4.882812 0.000610 0.001221 0.000000
0.00010 -87.451172 -4.272460 0.000000 0.000916 0.000000
... ... ... ... ...
Sweep5 0.68655 -87.261963 -4.272461 0.000305 0.000916 0.000305
0.68660 -87.258911 -4.272461 0.000305 0.000916 0.000305
0.68665 -87.252808 -5.493164 0.000000 0.000916 0.000305
0.68670 -87.261963 -4.272461 0.000305 0.000916 0.000305
我无法阅读Pandas的文档,试图找出如何基于这两个索引对这部分内容进行切片。
例如,我认为df ['Sweep1']将返回Sweep1的所有内容。但事实并非如此。但是,df.loc ['Sweep1']的工作方式与我的预期相同。为什么会这样?
我似乎完全无法通过时间索引进行索引。例如,我们分析的一个非常典型的部分是在特定时间范围内平均数据点,或者在特定时间段内找到最大值或最小值。那么,如何基于时间索引的特定时段(例如,时间0.0秒到0.5秒)切出数据区域。
如果我知道该范围内的数据点的确切数量(即范围*采样频率),我可以实现这一点,但是将时间设置为其中一个索引的目的是为了解决这个问题。
同样地,如果我想绘制让我们说Sweep1 Primary by Time - 我似乎无法弄清楚如何使用Time索引作为我的x轴。
所以,我想我的主要问题是:我如何根据扫描数和时间的某个子区域切出不同列中的数据点。这至少会让我指出正确的方向。
由于
答案 0 :(得分:0)
问题1:
df['Sweep1']
是返回名为Sweep1的列的正确语法。要对索引(行)进行切片,您可以执行df.ix['Sweep1']
。
问题2:
在切片时间之前,您需要创建一个布尔系列。我认为最简单的方法是将其用作列,例如
Time = df.reset_index('Time').Time
boolean = Time[(Time >= 0) & (Time < 0.5)]
result = df.loc[('Sweep1', boolean),:]
答案 1 :(得分:0)
以下内容应为您提供索引Primary
的t1-t2范围内的列PMTShutter
和Sweep1
。 t1和t2是花车。
idx = pandas.IndexSlice
df.loc[idx['Sweep1',t1:t2],['Primary', 'PMTShutter']]