2012-11-27 33 views
1

使用MultiIndex列創建DataFrame時,似乎無法使用像df[df["AA"]>0.0]這樣的語法選擇/過濾行。 例如:使用MultiIndex列過濾行

import pandas as pd 
import numpy as np 

dates = np.asarray(pd.date_range('1/1/2000', periods=8)) 
_metaInfo = pd.MultiIndex.from_tuples([('AA', '[m]'), ('BB', '[m]'), ('CC', '[s]'), ('DD', '[s]')], names=['parameter','unit']) 

df = pd.DataFrame(randn(8, 4), index=dates, columns=_metaInfo) 
print df[df['AA']>0.0] 

DF的結果[ 「AA」]> 0.0是索引數據幀異一個時間序列。這可能會導致崩潰。

當使用相同的元信息作爲針對行的索引,情況是不同的:

df1 = pandas.DataFrame(np.random.randn(4, 6), index=_metaInfo) 
print df1[df1["AA"]>0.0] 

生產:

[ 1.13268106 -0.06887761 0.68535054 2.49431163 -0.29349413 0.34772553] 

其是行AA大於零的元素。這僅給出了行AA的值,而不是DataFrame的其他列的值。

是否有解決方法?我是否想做我不應該做的事?

回答

1

您只能選擇'AA'列並將其用作整個df的過濾器。

像:

df[df[('AA','[m]')]>0.0] 

parameter   AA  BB  CC  DD 
unit    [m]  [m]  [s]  [s] 
2000-01-01 0.600748 -1.163793 -0.982248 -0.397988 
2000-01-03 1.045428 0.365353 0.049152 1.902942 
2000-01-06 0.891202 0.021921 1.215515 -1.624741 
2000-01-08 0.999217 -1.110213 0.257718 -0.096018 
+0

感謝魯特格爾,該訣竅 – user1515250