J'ai un jeu de données similaire à ce qui suit.
df =pd.read_csv('file.csv')
def SortMood(df)
df['mood']=[] #empty column as a list in the df to store the mood
for score in df['score']:
if score>(0.05):
df['mood'].append('positive')
elif -0.05<=score <=.05:
df['mood'].append('neutral')
else:
df['mood'].append('negative')
3 Réponses :
Utiliser Appliquer CODE>: def determine_mood(row, thresh=.05):
if row.score < -thresh:
return "negative"
elif row.score > thresh:
return "positive"
else:
return "neutral"
df["mood"] = df.apply(determine_mood, axis=1)
df
date score mood
0 3/1/16 0.6369 positive
1 5/1/16 -0.2023 negative
2 6/1/16 0.0400 neutral
3 7/1/16 0.0772 positive
4 9/1/16 -0.4215 negative
5 12/1/16 0.2960 positive
6 15/1/16 0.2500 positive
7 15/1/16 0.7684 positive
Utilisez ou utilisez pd.cut Code> à bin vos données à catégorique: numpy.select code> pour une colonne conditionnelle multiple vectorisée: p>
C'est presque certainement une solution plus rapide que d'utiliser appliquer code>. Pour op, si l'efficacité est importante, je suggérerais d'aller avec la réponse de @ Erfan.
J'oublie toujours couper code>, grande solution +1
Oui. Ceci est vraiment beaucoup plus rapide que la solution d'Andrew_Reece. Et fonctionne très bien pour mon jeu de données humanisant (des millions de rangées). Je vais le changer. Merci.
Il y a plusieurs façons de le faire. Très similaire à votre approche serait le ou raccourcissez-le avec une expression Lambda à: p> appliquer code> méthode de pandas: df.loc[:,'mood'] = df['score'].map(lambda x: 'positive' if x > 0.05 else ('neutral' if x > -0.05 else 'negative'))
Quelle est votre sortie attendue lorsque différents scores pour la même date donnent des réponses différentes?
@andrew_reece Il est en fonction des déclarations if / else. En fait, j'ai beaucoup de scores différents pour la même date. Merci
Est-ce que cela répond à votre question? Ajouter une nouvelle colonne à Python Pandas Dataframe basé sur plusieurs Conditions
@Non_linear Ce qui n'est pas clair, c'est la manière dont les instructions if / else doivent s'appliquer dans le cas où vous avez plusieurs évaluations pour la même date. Et vous attendez-vous à une seule sortie par date? Si tel est le cas, cela nécessitera un
groupeby code>. Il serait utile que vous puissiez (a) spécifier votre sortie attendue complet et (b) incluent un boîtier de bord avec deux résultats différents pour la même date. (Actuellement 15/1/16 a deux entrées mais elles évaluent tous les deux à poser.)@andrew_reece J'aurais probablement dû mettre ça. Mais votre solution suggérée prend aussi soin de ce problème. Je viens de vérifier le résultat de la sortie à une date unique avec 3 cas différents (positifs, négatifs et neutres) avec des scores différents et semble les classer correctement. Merci.