Hello I have the following dataframe.
Group Size
Short Small
Short Small
Moderate Medium
Moderate Small
Tall Large
I want to count the frequency of how many time the same row appears in the dataframe.
Group Size Time
Short Small 2
Moderate Medium 1
Moderate Small 1
Tall Large 1
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
You can use 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
Method 2
Update after pandas 1.1 value_counts now accept multiple columns
df.value_counts(["Group", "Size"])
You can also try 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: In order to get your out put
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
Method 3
Other posibbility is using .pivot_table() and aggfunc='size'
df_solution = df.pivot_table(index=['Group','Size'], aggfunc='size')
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0