2017-08-11 75 views
1

我有一個DataFrame DF,我試過ddf = df.describe(),並得到如下結果。如何在熊貓中製作分層過濾器?

我想要在此基礎上的報告,

所以我想分開的平均/最大/最小,並把它們放在我的Word文檔。

我嘗試了很多方法,但除非我平坦ddf,我無法根據item進行過濾。

     Absmm  Xmm  Ymm  Zmm 
Node item             
269.0 count 2.600000e+01 26.000000 26.000000 26.000000 
     mean -5.150000e-02 0.005423 0.027385 -0.057077 
     std 9.984077e-02 0.012113 0.076432 0.090868 
     min -2.820000e-01 -0.014000 -0.012000 -0.265000 
     25% -7.250000e-02 -0.000750 -0.001750 -0.072250 
     50% -8.000000e-03 0.005000 0.000000 -0.013500 
     75% 6.750000e-03 0.009750 0.012500 0.002500 
     max 6.600000e-02 0.048000 0.288000 0.052000 
275.0 count 2.600000e+01 26.000000 26.000000 26.000000 
     mean -8.688462e-02 -0.011000 0.035615 -0.053077 
     std 1.540525e-01 0.017797 0.113538 0.125961 
     min -5.990000e-01 -0.060000 -0.016000 -0.600000 
     25% -1.015000e-01 -0.020500 0.000000 -0.078500 
     50% -2.400000e-02 -0.006500 0.001000 -0.019500 
     75% -4.250000e-03 -0.001000 0.013250 0.001000 
     max 5.300000e-02 0.034000 0.567000 0.112000 

我試圖dmean = ddf.loc[ddf.index[1] == 'mean']或類似的東西,

,但我不能得到我想要的東西。

如何根據過濾獲得單獨DataFrame中每個節點的平均值?

回答

2

您是非常接近 - 使用Index.get_level_values

#select by position - second level of MultiIndex 
dmean = ddf.loc[ddf.index.get_level_values(1) == 'mean'] 
#select by level name 
dmean = ddf.loc[ddf.index.get_level_values('item') == 'mean'] 

更好的是使用DataFrame.xs

dmean = ddf.xs('mean', axis=0, level=1) 
+1

哇,太酷了。有用。儘管我不知道內部發生了什麼,但似乎我們對DataFrame瞭解得越多的功能/方法/屬性越多,我們就可以更好地處理它:-D。 – jetorz