2017-08-30 4 views
3

Je suis confronté au problème que je n'ai besoin que d'un sous-ensemble d'une image de mon original qui est répartie sur différentes lignes et colonnes. Par exemple:Accéder aux entrées dans le cadre de données pandas en utilisant une liste d'indices

# My Original dataframe 
import pandas as pd 
dfTest = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]]) 

Sortie:

0 1 2 
0 1 2 3 
1 4 5 6 
2 7 8 9 

Je peux fournir une liste avec des lignes et des indices de la colonne où mes valeurs souhaitées sont situées:

array_indices = [[0,2],[1,0],[2,1]] 

Ma sortie souhaitée est une série:

3 
4 
8 

Peut-on une aide?

Répondre

5

Utilisez pd.DataFrame.lookup

dfTest.lookup(*zip(*array_indices)) 

array([3, 4, 8]) 

Que vous pouvez envelopper dans un constructeur pd.Series

pd.Series(dfTest.lookup(*zip(*array_indices))) 

0 3 
1 4 
2 8 
dtype: int64 

variante légère

i, j = np.array(array_indices).T 
dfTest.values[i, j] 

array([3, 4, 8]) 

De même que ci-dessus

pd.Series(dfTest.values[i, j]) 

0 3 
1 4 
2 8 
dtype: int64