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

0 投票
1 回答
1934 浏览
提问于 2025-04-17 20:35

我有一个 pandas 的 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. 值小于 1.0

比如,对于“值大于 2.0”,它应该返回 [1,4]。我试过用这个方法,但得到的是布尔值的结果。

df.values > 2

相关问题:

1 个回答

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]]

撰写回答