J'aurais besoin de créer une nouvelle colonne comme suit:
supposons que mon jeu de données ressemble à p> je voudrais avoir p> i déjà déterminé la fréquence des éléments comme suit: p> Je tiens à vous demander comment créer une nouvelle colonne avec ces valeurs. p> p>
6 Réponses :
Utiliser groupby code> et transformer code>. Vous devrez également créer une fonction pour classer vos articles: def categorize(x):
num = len(x)
if num >= 5:
return 'best seller'
elif num >= 3:
return 'ok'
else:
return 'bad'
df['category'] = df.groupby('Items').transform(categorize)
Selon ce que vous avez défini, vous n'avez pas de dépendance de la catégorie à la date (comme supposé par l'OUTPU).
Vous pouvez simplement utiliser Appliquer une fonction sur Axis 1 P>
def testfun(e):
count = len(df[df["Items"] == e["Items"]])
if(count>=5):
return "best seller"
if(count>=2 and count<5 ):
return "ok"
else:
return "bad"
df["count"] = df.apply(testfun,axis=1)
1 cintura bad
2 maglietta best seller
3 maglietta best seller
4 cappello ok
5 jeans best seller
6 cappello ok
7 maglietta best seller
8 maglietta best seller
9 jeans best seller
10 jeans best seller
11 maglietta best seller
12 jeans best seller
13 jeans best seller
df.apply code> sur l'axe 1 est généralement évité car il est inefficace plus info ici .
@ Ch3ster, ne le savait pas. Génial, votre réponse est plus propre
Heureux d'avoir aidé. @ La réponse de stupidwolf est vraiment sympa tho.
Vous pouvez utiliser couper sur valeur_counts:
df['Category'] = cats[df['Items']].to_numpy()
df
Items Date Category
0 calzini 2020/02/23 bad
1 cintura 2020/02/21 bad
2 maglietta 2020/02/23 best seller
3 maglietta 2020/02/22 best seller
4 cappello 2020/02/23 ok
5 jeans 2020/02/23 best seller
6 cappello 2020/02/22 ok
7 maglietta 2020/02/22 best seller
8 maglietta 2020/02/22 best seller
9 jeans 2020/02/22 best seller
10 jeans 2020/02/23 best seller
11 maglietta 2020/02/23 best seller
12 jeans 2020/02/22 best seller
13 jeans 2020/02/23 best seller
Vraiment belle réponse. +1 df.values code> ne doit pas être utilisé mentionné dans le DOCS , remplacez-le par .to_numpy () code> ou df ['Catégorie'] = DF [" Articles ']. Carte ( chats) code>
Je vois, n'était pas au courant de ça! Merci de le pointer.
Heureux d'avoir aidé. N'hésitez pas à les ajouter à la réponse, les commentaires peuvent être supprimés. Et merci pour les crédits, en fait, je n'ai rien fait que simplement dire que vous êtes humble, vous n'avez pas besoin de créditer. ;)
Semble très bon, pouvez-vous s'il vous plaît partager la manière dont vous avez choisi des poubelles des conditions 2-5,> 5 et <2? bacs = [0,1,4,10]
@ A.B, c'est la voie à laquelle la pd.cut fonctionne lorsque vous fournissez les pauses, un intervalle est défini comme> LB (limite inférieure) et <= ub (limite supérieure). Donc, pour 2-4, ce sera 1 (2> 1) et 4 (<= 4). Pour> 5, vous avez juste besoin d'une frontière droite supérieure à 5, peut être 10,20. Même chose pour la gauche.
Le code ci-dessous devrait fonctionner.
df['category'] = pd.cut(df['sold_items'],bins = [0,1,4,df['sold_items'].max()],labels = ['bad','ok','best seller'])
Vous pouvez également remplacer les valeurs conditionnelles dans valeur_counts code>, puis mappe code>:
Je pense que je manque une étape. Je devrais associer à chaque article sa fréquence, puis appliquer la condition IF.
Veuillez fournir un exemple de reproductible minimal et clarifier le problème exactement.
@Amc Je pense que j'ai fourni des données pour reproduire l'exemple. J'ai déjà reçu beaucoup de réponses qui m'a aidé.
Je pense que j'ai fourni des données pour reproduire l'exemple. I> dans un format qui est loin d'être pratique et qui ne fait pas un exemple reproductible. J'ai déjà reçu beaucoup de réponses qui m'a aidé. I> Je suis heureux d'entendre ça.