Hola, tengo el siguiente marco de datos.
Group Size
Short Small
Short Small
Moderate Medium
Moderate Small
Tall Large
Quiero contar la frecuencia de cuántas veces aparece la misma fila en el marco de datos.
Group Size Time
Short Small 2
Moderate Medium 1
Moderate Small 1
Tall Large 1
Respuestas:
Puedes 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
fuente
.size()
tenga en cuenta que el uso de will devuelve Series mientras que.size().reset_index(name="Time")
es un DataFrame. Gracias Andy.df.groupby(by=["Group", "Size"], as_index=False).size()
simplementeLa actualización después de pandas 1.1
value_counts
ahora acepta múltiples columnasdf.value_counts(["Group", "Size"])
También puedes probar
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: Para sacar tu salida
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
fuente
margins=True
para obtener los recuentos marginales!Otra posibilidad es usar
.pivot_table()
yaggfunc='size'
df_solution = df.pivot_table(index=['Group','Size'], aggfunc='size')
fuente