Bonjour, j'ai le dataframe suivant.
Group Size
Short Small
Short Small
Moderate Medium
Moderate Small
Tall Large
Je veux compter la fréquence d'apparition de la même ligne dans le dataframe.
Group Size Time
Short Small 2
Moderate Medium 1
Moderate Small 1
Tall Large 1
Réponses:
Vous pouvez utiliser groupby's
size
:In [11]: df.groupby(["Group", "Size"]).size() Out[11]: Group Size Moderate Medium 1 Small 1 Short Small 2 Tall Large 1 dtype: int64 In [12]: df.groupby(["Group", "Size"]).size().reset_index(name="Time") Out[12]: Group Size Time 0 Moderate Medium 1 1 Moderate Small 1 2 Short Small 2 3 Tall Large 1
la source
.size()
retournera Series pendant que.size().reset_index(name="Time")
est un DataFrame. Merci Andy.df.groupby(by=["Group", "Size"], as_index=False).size()
simplementLa mise à jour après Pandas 1.1
value_counts
accepte désormais plusieurs colonnesdf.value_counts(["Group", "Size"])
Vous pouvez également essayer
pd.crosstab()
Group Size Short Small Short Small Moderate Medium Moderate Small Tall Large pd.crosstab(df.Group,df.Size) Size Large Medium Small Group Moderate 0 1 1 Short 0 0 2 Tall 1 0 0
EDIT: Afin de vous faire sortir
pd.crosstab(df.Group,df.Size).replace(0,np.nan).\ stack().reset_index().rename(columns={0:'Time'}) Out[591]: Group Size Time 0 Moderate Medium 1.0 1 Moderate Small 1.0 2 Short Small 2.0 3 Tall Large 1.0
la source
margins=True
pour obtenir les comptes marginaux!L'autre posibbilité utilise
.pivot_table()
etaggfunc='size'
df_solution = df.pivot_table(index=['Group','Size'], aggfunc='size')
la source