2014-03-03 128 views
0

我有一個熊貓DataFrame像下面。熊貓DataFrame按值分組,並獲得列和行索引

df = pandas.DataFrame(np.random.randn(5,5),columns=['1','2','3','4','5']) 

     1   2   3   4   5 
0 0.877455 -1.215212 -0.453038 -1.825135 0.440646 
1 1.640132 -0.031353 1.159319 -0.615796 0.763137 
2 0.132355 -0.762932 -0.909496 -1.012265 -0.695623 
3 -0.257547 -0.844019 0.143689 -2.079521 0.796985 
4 2.536062 -0.730392 1.830385 0.694539 -0.654924 

我需要獲得以下三組的行和列索引。 (在我的原始數據集沒有負值)

  1. 值大於2.0
  2. 值爲1.0之間 -
  3. 2.0的值小於1.0

對於例如用於「值大於2.0「應該返回[1,4]。我已經嘗試使用這給出了布爾結果。

df.values > 2 
+0

返回一個numpy的數組,你可以只使用面膜進行數據框選擇像'DF [DF > 2]'這會返回一個帶有'NaN'的數據框,用於不滿足布爾條件的值和作爲數據框的值。然後你就可以用'NaN'值做的事情,或者設置爲'0',或者使用'dropna'丟棄它們。 – EdChum

+0

@EdChum:好的,那麼如何獲取行和列索引對? –

回答

2

您可以使用np.where在布爾結果提取指數:

import numpy as np 
import pandas as pd 

df = pd.DataFrame(np.random.randn(5,5),columns=['1','2','3','4','5']) 
condition = df.values > 2 
print np.column_stack(np.where(condition)) 

對於df這樣,

  1   2   3   4   5 
0 0.057347 0.722251 0.263292 -0.168865 -0.111831 
1 -0.765375 1.040659 0.272883 -0.834273 -0.126997 
2 -0.023589 0.046002 1.206445 0.381532 -1.219399 
3 2.290187 2.362249 -0.748805 -1.217048 -0.973749 
4 0.100084 0.671120 -0.211070 0.903264 -0.312815 

輸出:

[[3 0] 
[3 1]] 

Ø [R獲得行列指數對如果有必要的列表:

print map(list, np.column_stack(np.where(condition))) 

輸出:

[[3,0], [3,1]] 
+0

非常感謝!有效! :) –