نحوه پیدا کردن ردیف دارای بیشترین مقدار برای ستون مشخص پس از اعمال groupby در Pandas

mohsen2 هفته قبل
ارسال شده در
python

فرض کنید که دیتاستی شامل سه ستون Sp و Mt و count داریم و می خواهیم بر اساس دو ستون Mt و Sp گروه بندی انجام دهیم و مقدار ستون count برابر با بیشترین مقدار بین ردیف های هر گروه باشد. برای مثال دیتاست زیر را در نظر بگیرید.

         Sp   Mt Value   count
0  MM1  S1   a     **3**
1  MM1  S1   n       2
2  MM1  S3   cb    **5**
3  MM2  S3   mk    **8**
4  MM2  S4   bg    **10**
5  MM2  S4   dgd     1
6  MM4  S2   rd      2
7  MM4  S2   cb      2
8  MM4  S2   uyi   **7**

    

پس از گروه بندی، می خواهیم تعداد از ردیفی که بیشترین مقدار را دارد برداشته شود. یعنی به صورت زیر:

         Sp   Mt   Value  count
0  MM1  S1   a      **3**
2  MM1  S3   cb     **5**
3  MM2  S3   mk     **8**
4  MM2  S4   bg     **10** 
8  MM4  S2   uyi    **7**

    

راه حل اول:

یکی از روش‌ها استفاده از متد groupby و سپس transform است تا ماکزیمم را برای هر گروه به دست آوریم. به این ترتیب می‌توانیم اندیس‌های ردیف‌هایی که این ماکزیمم را دارند شناسایی کنیم:

      idx = df.groupby(['Sp', 'Mt'])['count'].transform(max) == df['count']
result = df[idx]

    

این کد به ما اجازه می‌دهد تمامی ردیف‌هایی را که مقدار count آن‌ها ماکسیمم در گروه است، استخراج کنیم. اگر تعداد ماکزیمم‌های تکراری وجود داشته باشد، همه آن‌ها بازگردانده می‌شوند.

راه حل دوم:

راه حل دیگر این است که دیتافریم را بر اساس count ابتدا مرتب کنیم و سپس داپلیکیت های ستون Sp و Mt را حذف کنیم

      result = df.sort_values('count', ascending=False).drop_duplicates(['Sp', 'Mt'])

    

این روش سریع و کارآمد بوده و در دیتافریم‌های بزرگ تر نیز خوب عمل می‌کند.

راه حل سوم:

همچنین می‌توان از متد idxmax() برای به دست آوردن اندیس‌ ردیف‌هایی که بیشترین مقدار count را دارند، استفاده کرد:

      result = df.loc[df.groupby(['Sp', 'Mt'])['count'].idxmax()]

    

این روش نیز می‌تواند به سادگی ردیف‌هایی با حداکثر مقدار را بازیابی کند.

رای
0
ارسال نظر
مرتب سازی:
اولین نفری باشید که نظر می دهید!