Pandas
keyboard_arrow_down 655 guides
chevron_leftData Aggregation Cookbook
Applying a function to multiple columns in groupsCalculating percentiles of a DataFrameCalculating the percentage of each value in each groupComputing descriptive statistics of each groupDifference between a group's count and sizeDifference between methods apply and transform for groupbyGetting cumulative sum of each groupGetting descriptive statistics of DataFrameGetting multiple aggregates of a column after groupingGetting n rows with smallest column value in each groupGetting number of distinct rows in each groupGetting size of each groupGetting specific group after groupbyGetting the first row of each groupGetting the last row of each groupGetting the top n rows with largest column value in each groupGetting unique values of each groupGrouping by multiple columnsGrouping without turning group column into indexMerging rows within a group togetherNaming columns after aggregationSorting values within groups
check_circle
Mark as learned thumb_up
0
thumb_down
0
chat_bubble_outline
0
Comment auto_stories Bi-column layout
settings
Getting n rows with smallest column value in each group in Pandas
schedule Aug 10, 2023
Last updated local_offer
Tags Python●Pandas
tocTable of Contents
expand_more Master the mathematics behind data science with 100+ top-tier guides
Start your free 7-days trial now!
Start your free 7-days trial now!
Example
Consider the following DataFrame about some products:
df = pd.DataFrame({"price":[500,300,700, 200,900], "brand":["apple", "google", "apple", "google","apple"], "device":["phone","phone","computer","phone","phone"]}, index=["a","b","c","d","e"])df
price brand devicea 500 apple phoneb 300 google phonec 700 apple computerd 200 google phonee 900 apple phone
Solution
To get the top 2 cheapest products of each brand:
df.sort_values("price", ascending=True).groupby("brand").head(2)
price brand deviced 200 google phoneb 300 google phonea 500 apple phonec 700 apple computer
Explanation
We first sort by price
in ascending order:
df.sort_values("price", ascending=True)
price brand deviced 200 google phoneb 300 google phonea 500 apple phonec 700 apple computere 900 apple phone
Next, we group by brand
, and the what's important here is that groupby(~)
preserves order. This means that even after we group by brand
, the rows in every group will still be sorted by price
. For this very reason, calling head(2)
would return the 2 cheapest device in each group.
Published by Isshin Inada
Edited by 0 others
Did you find this page useful?
thumb_up
thumb_down
Comment
Citation
Ask a question or leave a feedback...
thumb_up
0
thumb_down
0
chat_bubble_outline
0
settings
Enjoy our search
Hit / to insta-search docs and recipes!