Witam mam następującą ramkę danych.
Group Size
Short Small
Short Small
Moderate Medium
Moderate Small
Tall Large
Chcę policzyć, ile razy ten sam wiersz pojawia się w ramce danych.
Group Size Time
Short Small 2
Moderate Medium 1
Moderate Small 1
Tall Large 1
Odpowiedzi:
Możesz użyć funkcji Groupby
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
źródło
.size()
zwróci Series, gdy.size().reset_index(name="Time")
jest DataFrame. Dzięki Andy.df.groupby(by=["Group", "Size"], as_index=False).size()
po prostuAktualizacja po pandach 1.1
value_counts
akceptuje teraz wiele kolumndf.value_counts(["Group", "Size"])
Możesz też spróbować
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
EDYCJA: Aby uzyskać wyjście
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
źródło
margins=True
aby uzyskać marginalne liczby!Inną możliwością jest używanie
.pivot_table()
iaggfunc='size'
df_solution = df.pivot_table(index=['Group','Size'], aggfunc='size')
źródło