J'ai une liste d'amis qui participent à ma fête:
import pandas as pd
d = {'name': ['Alice', 'Bob', 'Charlie'], 'is_here': [True, True, False]}
df = pd.DataFrame(data=d)
Question: Comment puis-je basculer le is_here
booléen en fonction d'un nom donné? (par exemple, comment faire de toggle('Charlie')
transforme le False
en True
dans mon DataFrame?)
Je peux obtenir son statut de booléen en utilisant df[df['name'] == 'Charlie'].iloc[0]['is_here']
, mais j'ai du mal à changer la valeur dans df
.
3 réponses
Basculer Charlie
avec xor
df.loc[df.name.eq('Charlie'), 'is_here'] ^= True
df
is_here name
0 True Alice
1 True Bob
2 True Charlie
Explication
Un seul peut être vrai
Table de vérité pour xor
x y x ^ y
0 True True False
1 True False True
2 False True True
3 False False False
Donc:
si x = True
, x ^ True
est évalué à False
si x = False
, x ^ True
est évalué à True
En utilisant ^=
sur le loc
, nous prenons le xor
avec True
pour tous les éléments représentés avec la tranche et attribuons les résultats en place.
Vous pouvez utiliser set_index
+ .loc
df.set_index('name',inplace=True)
df.loc['Alice']
Out[164]:
is_here True
Name: Alice, dtype: bool
Mise à jour
df.loc[df.name=='Charlie','is_here']=True
df
Out[176]:
is_here name
0 True Alice
1 True Bob
2 True Charlie
Update 2
df.loc[df.name=='Charlie','is_here']=~df['is_here']
df
Out[185]:
is_here name
0 True Alice
1 True Bob
2 True Charlie
Pour mettre à jour votre cartographie
df = df.set_index('name')
df.loc['Charlie', 'is_here'] = ~df.loc['Charlie', 'is_here']
print(df.reset_index())
# name is_here
# 0 Alice True
# 1 Bob True
# 2 Charlie True
Pour interroger votre cartographie
Depuis votre dataframe:
ishere = df.set_index('name')['is_here'].get
print(ishere('Alice')) # True
À partir de votre dictionnaire d'origine:
ishere = dict(zip(d['name'], d['is_here'])).get
print(ishere('Alice')) # True
Questions connexes
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.