[英]Struggling with MultiIndex Slicing (Pandas)
我正在將我的數據文件夾組織成具有類似於以下內容的多索引數據幀:
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秒)切出數據區域。
如果我知道該范圍內的數據點的確切數量(即范圍*采樣頻率),則可以實現此目的,但是將Time設置為索引之一的目的是避免必須這樣做。
類似地,如果我想按時間繪制Sweep1 Primary,則似乎無法弄清楚如何將Time索引用作我的x軸。
因此,我想我的主要問題是:如何根據掃描數和“時間”的某個子區域從不同的列中切出數據點。 至少這將為我指明正確的方向。
謝謝
問題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),:]
以下應該為您提供索引Sweep1
t1-t2范圍內的Primary
和PMTShutter
列。 t1和t2是浮點數。
idx = pandas.IndexSlice
df.loc[idx['Sweep1',t1:t2],['Primary', 'PMTShutter']]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.