Pandas DataFrame按值分组并获取列&行索引

时间:2014-03-03 09:57:50

标签: python pandas 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 - 2.0
  3. 之间
  4. 值小于1.0
  5. 例如,对于“值大于2.0”,它应返回[1,4]。我试过用它来得到一个布尔结果。

    df.values > 2
    

1 个答案:

答案 0 :(得分: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]]

或者在必要时获取行列索引对列表:

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

输出:

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