Attribuer séquentiellement des valeurs de deux listes différentes à une colonne dans une trame de données en python


Mon cerveau

J'ai deux valeurs différentes (animal ou outil) dans la colonne du dataframe. Ainsi, chaque cellule est soit un animal, soit un outil. J'ai une liste de noms d'animaux séparée et une liste de noms d'outils (qui ont les noms réels des outils et des animaux). Je veux que mon code parcourt chaque cellule de la colonne dans le dataframe et attribue un nom d'animal à partir de la liste d'animaux si la valeur de la cellule = animal; ou le nom de l'outil dans la liste d'outils si la valeur de la cellule est tool. Je veux que cela soit fait séquentiellement, donc si le dataframe ressemble à:

Index  Category
0      animal
1      animal
2       tool
3      animal
4       tool

et la liste des animaux est:

cat
dog
parrot
bird
cheetah

et la liste d'outils est:

nail
iron
hammer
wheel
screw

la sortie doit être:

Index Category    Output
0      animal     cat
1      animal     dog
2       tool      nail
3      animal     parrot
4       tool      iron

Il semble que cela devrait être assez simple en Python mais n'a pas réussi. Toute aide serait appréciée. Merci!

Arn

Dans ce cas, puisqu'il n'y a que deux catégories, animalet tool, vous pouvez aborder ce problème de manière simple et efficace en sélectionnant les lignes qui contiennent la première et la dernière valeur de catégorie séparément et en leur attribuant les listes:

import numpy as np
import pandas as pd

# setup
df = pd.DataFrame({"Category": ['animal', 'animal', 'tool', 'animal', 'tool'], "Output": np.nan})
animal_list = ['cat', 'dog', 'parrot', 'bird', 'cheetah']
tool_list = ['nail', 'iron', 'hammer', 'wheel', 'screw']

# solution
df.loc[df.Category == 'animal', 'Output'] =  np.resize(animal_list, df.loc[df.Category == 'animal', 'Output'].shape)
df.loc[df.Category == 'tool', 'Output'] =  np.resize(tool_list, df.loc[df.Category == 'tool', 'Output'].shape)

Articles connexes