从pandas索引中查找整数行索引

时间:2016-10-12 19:33:25

标签: python pandas dataframe row indices

以下代码查找索引,其中df [' A'] == 1

import pandas as pd
import numpy as np
import random

index = range(10)
random.shuffle(index)
df = pd.DataFrame(np.zeros((10,1)).astype(int), columns = ['A'], index = index)

df.A.iloc[3:6] = 1
df.A.iloc[6:] = 2

print df

print df.loc[df['A'] == 1].index.tolist()

它正确返回pandas索引。如何使用pandas API获取整数索引([3,4,5])?

   A
8  0
4  0
6  0
3  1
7  1
1  1
5  2
0  2
2  2
9  2
[3, 7, 1]

3 个答案:

答案 0 :(得分:3)

怎么样?

In [12]: df.index[df.A == 1]
Out[12]: Int64Index([3, 7, 1], dtype='int64')

或(取决于您的目标):

In [15]: df.reset_index().index[df.A == 1]
Out[15]: Int64Index([3, 4, 5], dtype='int64')

演示:

In [11]: df
Out[11]:
   A
8  0
4  0
6  0
3  1
7  1
1  1
5  2
0  2
2  2
9  2

In [12]: df.index[df.A == 1]
Out[12]: Int64Index([3, 7, 1], dtype='int64')

In [15]: df.reset_index().index[df.A == 1]
Out[15]: Int64Index([3, 4, 5], dtype='int64')

答案 1 :(得分:1)

不需要numpy,你是对的。只是带有listcomp的纯python:

只需找到值为1的索引

print([i for i,x in enumerate(df['A'].values) if x == 1])

答案 2 :(得分:1)

这是一种方式:

df.reset_index().index[df.A == 1].tolist()

使用[0, 1, 2, ...]重新索引数据框,然后根据布尔掩码df.A == 1提取整数索引值。

修改 @ index[df.A == 1]想法的@Max信用。