Olá, tenho o seguinte dataframe.
Group Size
Short Small
Short Small
Moderate Medium
Moderate Small
Tall Large
Quero contar a frequência de quantas vezes a mesma linha aparece no dataframe.
Group Size Time
Short Small 2
Moderate Medium 1
Moderate Small 1
Tall Large 1
Respostas:
Você pode usar 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
fonte
.size()
will retorna Series enquanto.size().reset_index(name="Time")
for um DataFrame. Obrigado Andy.df.groupby(by=["Group", "Size"], as_index=False).size()
simplesmenteA atualização após o pandas 1.1
value_counts
agora aceita múltiplas colunasdf.value_counts(["Group", "Size"])
Você também pode tentar
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
EDITAR: A fim de obter o seu resultado
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
fonte
margins=True
para obter as contagens marginais!Outra possibilidade é usar
.pivot_table()
eaggfunc='size'
df_solution = df.pivot_table(index=['Group','Size'], aggfunc='size')
fonte