【问题标题】:Struggling with MultiIndex Slicing (Pandas)多索引切片(Pandas)苦苦挣扎
【发布时间】:2014-10-03 17:42:50
【问题描述】:

我正在将我的数据文件夹组织成多索引数据帧,其结构类似于:

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 - 我似乎无法弄清楚如何使用时间索引作为我的 x 轴。

所以,我想我的主要问题是:如何根据扫描数和时间的某个子区域从不同列中切出数据点。这至少会为我指明正确的方向。

谢谢

【问题讨论】:

  • 我对正在使用的数据、应用程序或库知之甚少;对我来说,这听起来像是 sqlite3 这样的数据库引擎可能适合的东西;您可以在其中使用查询语言语法来获取所需的数据点,而不是使用可能不适合您的数据查找需求或应用程序固有的 Python 数据类型原语。

标签: python pandas slice multi-index


【解决方案1】:

问题 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),:]

【讨论】:

  • 那我应该把时间留作一列吗?在我导入原始数据文件时,时间只是第一列,我将其转换为索引。不过,这似乎会适得其反。
  • 将其保留为一列。除非您有令人信服的理由,否则不要创建 MultiIndex。我只在需要将类别与我将要操作的值隔离时才这样做。
  • 好吧,我仍然需要创建一个多索引,因为 Sweeps 是第二个索引。只是它不会将 Time 作为索引,而是保留默认的“索引”值(即 0 到 #rows-1)
  • ix 不被鼓励。首选lociloc(用于纯位置索引)。
【解决方案2】:

以下内容应在索引Sweep1 的 t1-t2 范围内为您提供列 PrimaryPMTShutter。 t1 和 t2 是浮点数。

idx = pandas.IndexSlice
df.loc[idx['Sweep1',t1:t2],['Primary', 'PMTShutter']]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多