2017-06-08 1 views
2

J'ai une base de données avec une liste dans une colonne et une autre colonne avec une valeur entière spécifique pour cette ligne. Je veux utiliser cette valeur entière pour extraire une valeur spécifique de la liste dans l'autre colonne:Utiliser un nombre entier dans une colonne de données pandas pour extraire une valeur spécifique d'une liste dans une autre colonne

df:

list           val 
1 ['mohamed', 'adam', 'paul', 'dave']   3 
2 ['dave', 'fred']        0 
3 ['john', 'dave', 'jane']      1 
4 ['dave']          0 

cela a été créé par:

df = df.loc[df['unsplit_list'].str.contains('dave')] 
df['list'] = df['unsplit_list'].str.split('|') 
df['val'] = df['list'].apply(lambda lst: [i for i, x in enumerate(lst) if 'dave' in x][0]) 
df['val'] = df['val'].astype(int) 

lorsque je tente d'obtenir la valeur de dave de ma liste, il arrive avec une erreur:

df['list'].str[df['val']] 

>> 
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 

si je l'ai fait:

df['list'].str[df[1]] 

alors je serais en mesure d'obtenir la valeur dans la liste en utilisant cet entier. Comment puis-je obtenir cette valeur que je veux?

Répondre

1

Vous pouvez faire:

df.apply(lambda x: x['list'][x['value']], axis=1) 
1
df['name'] = [row[0][row[1]] for ix, row in df.iterrows()]