Je dois compter et additionner des totaux sur une trame de données, mais avec une condition:
fruit days_old
apple 4
apple 5
orange 1
orange 5
Je dois compter avec la condition qu'un fruit ait plus de 3 jours. Donc, la sortie dont j'ai besoin est
2 pommes et 1 orange
Je pensais que je devrais utiliser une fonction Apply, mais je devrais enregistrer chaque type de fruit dans une variable ou quelque chose. Je suis sûr qu'il existe un moyen plus simple.
Ps. J'ai cherché mais je ne vois pas de moyen clair de créer des tableaux ici avec un espacement approprié. La seule chose qui est claire est de ne pas copier et coller avec des onglets!
4 réponses
Une façon consiste à utiliser pd.Series.value_counts
:
res = df.loc[df['days_old'] > 3, 'fruit'].value_counts()
# apple 2
# orange 1
# Name: fruit, dtype: int64
L'utilisation de pd.DataFrame.apply
est déconseillée car cela entraînerait une boucle inefficace.
Les méthodes value_counts()
décrites par @jpp et @chrisz sont excellentes. Pour publier une autre stratégie, vous pouvez utiliser {{X1 }}:
df[df.days_old > 3].groupby('fruit').size()
# fruit
# apple 2
# orange 1
# dtype: int64
Vous pouvez utiliser value_counts()
:
In [120]: df[df.days_old > 3]['fruit'].value_counts()
Out[120]:
apple 2
orange 1
Name: fruit, dtype: int64
Je voulais dans la partie variation.
pd.factorize
+ np.bincount
f, u = pd.factorize(df.fruit)
pd.Series(
np.bincount(f, df.days_old > 3).astype(int), u
)
apple 2
orange 1
dtype: int64
Questions connexes
Questions liées
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.