Use DataFrame.loc[] / DataFrame.iloc[] .
Source DataFrame:
In [128]: df = pd.DataFrame(np.random.randint(100,size=(100,3)), columns=list('abc')) In [129]: df Out[129]: abc 0 74 99 10 1 17 47 4 2 43 48 12 3 4 41 6 4 48 87 91 5 15 7 66 6 1 81 44 7 19 46 26 8 66 41 53 9 83 66 9 .. .. .. .. 90 9 14 39 91 58 11 14 92 44 20 58 93 12 15 15 94 18 81 67 95 90 17 11 96 61 6 16 97 88 12 44 98 21 39 49 99 77 85 72 [100 rows x 3 columns] In [130]: idx = pd.Int64Index([70, 28, 9, 4, 72, 34, 52, 48, 37, 35, 14, 16, 18, 33, 40, 86, 47, 53],dtype='int64')
Solution with DataFrame.loc[] :
In [131]: df.loc[idx] Out[131]: abc 70 61 50 5 28 97 65 38 9 83 66 9 4 48 87 91 72 91 65 98 34 83 4 44 52 8 68 15 48 55 17 26 37 56 61 8 35 1 29 12 14 96 12 18 16 44 35 74 18 69 65 24 33 57 55 51 40 55 15 40 86 85 81 38 47 14 27 27 53 57 50 77
Solution with DataFrame.iloc[] :
In [132]: df.iloc[idx] Out[132]: abc 70 61 50 5 28 97 65 38 9 83 66 9 4 48 87 91 72 91 65 98 34 83 4 44 52 8 68 15 48 55 17 26 37 56 61 8 35 1 29 12 14 96 12 18 16 44 35 74 18 69 65 24 33 57 55 51 40 55 15 40 86 85 81 38 47 14 27 27 53 57 50 77
NOTE: notice the difference in loc[] and iloc[] behavior - if the index values in the DataFrame do not match np.arange(len(df)) , then the results of df.loc[idx] and df.iloc[idx] will vary.
Example:
In [135]: df = pd.DataFrame(np.random.randint(100,size=(10,3)), columns=list('abc'), index=np.random.choice(range(10),10,replace=False)) In [136]: df Out[136]: abc 4 84 33 89 0 33 27 46 3 72 46 88 9 29 11 6 1 81 47 1 5 43 63 88 8 20 61 33 6 40 57 98 7 3 53 13 2 64 63 75 In [137]: idx = np.array([2,4,6])
In [138]: df.loc[idx] # выбрать строки со значениями индекса [2,4,6] Out[138]: abc 2 64 63 75 4 84 33 89 6 40 57 98 In [139]: df.iloc[idx] # выбрать строки с порядковыми номерами [2,4,6] Out[139]: abc 3 72 46 88 1 81 47 1 8 20 61 33