ভূমিকা
ডেটা বিশ্লেষণে সবচেয়ে মৌলিক এবং সাধারণ অপারেশন হল একটি গ্রুপের মধ্যে কোনো কলামের সর্বোচ্চ মান সম্পন্ন সারি নির্বাচন করা। এই পোস্টে আমি দেখাব কীভাবে একটি DataFrame-এ প্রতিটি গ্রুপের সর্বোচ্চ মান বের করতে হয়।
সমস্যা
ধরুন আপনাকে একটি মুভি ডেটাসেট দেওয়া হয়েছে এবং প্রতিটি বছরের সবচেয়ে জনপ্রিয় ফিল্ম তালিকাভুক্ত করতে বলা হয়েছে পপুলারিটি ভিত্তিক।
কীভাবে করবেন
১. ডেটা প্রস্তুতি
Kaggle.com থেকে movies ডেটাসেট ডাউনলোড করুন এবং Pandas DataFrame-এ ইম্পোর্ট করুন।
import pandas as pd
import numpy as np
movies = pd.read_csv("https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv")
২. বেসিক ডেটা অ্যানালাইসিস
# ডেটা টাইপ চেক
print(f"Output \n*** Datatypes are {movies.dtypes} ")
৩. মেমরি অপ্টিমাইজেশন
৬৪-বিট কলামগুলো ছোট টাইপে কনভার্ট করুন (যেমন vote_count, runtime)।
৪. বছরে গ্রুপ করে সর্বোচ্চ পপুলারিটি
SQL-এ যেন হয়: SELECT movie with max popularity FROM movies GROUP BY movie released year
রিলিজ ডেট অবজেক্ট টাইপ, তাই নया কলাম 'year' তৈরি করুন।
movies['year'] = pd.to_datetime(movies['release_date']).dt.year.astype('Int64')
পদ্ধতি ১: গ্রুপবাই ছাড়া
প্রয়োজনীয় কলাম নির্বাচন করে সর্ট করুন।
movies[["title", "year", "popularity"]].sort_values(["year","popularity"], ascending=False)
তারপর প্রতিটি বছরের প্রথম সারি রাখে বাকি ড্রপ করুন।
movies[["title", "year", "popularity"]].sort_values(["year","popularity"], ascending=False).drop_duplicates(subset="year")
পদ্ধতি ২: গ্রুপবাই ব্যবহার করে
movies[["title", "year", "popularity"]].groupby("year", as_index=False).apply(lambda df:df.sort_values("popularity", ascending=False).head(1)).droplevel(0).sort_values("year", ascending=False)
দুই পদ্ধতিই একই ফলাফল দেয়: প্রতিটি বছরের সর্বোচ্চ জনপ্রিয় মুভি।