Pandas DataFrame 按值分组并获取列和行索引
我有一个 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
我需要找出以下三个组的行和列索引。(在我原始的数据集中没有负值)
- 值大于 2.0
- 值在 1.0 到 2.0 之间
- 值小于 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]]